33

Web ページのユーザーは、「ボタン」と「ボタン スタイルのリンク」を区別しません。「ボタンまたはリンク」がページに存在するかどうかのチェックを追加する方法はありますか?

たとえば、カピバラには次のステップがあります。

page.should have_button('Click me')

ボタンとしてスタイル設定されたリンクは見つかりません。

4

7 に答える 7

56

更新された回答 (マッチャーは RSpec 3.0+ で廃止されるべきです):

expect(page).to have_selector(:link_or_button, 'Click me')

前:

page.should have_selector(:link_or_button, 'Click me')

click_link_or_buttonここで定義されているものに従います: https://github.com/jnicklas/capybara/blob/master/lib/capybara/node/actions.rb#L12

def click_link_or_button(locator)
  find(:link_or_button, locator).click
end
alias_method :click_on, :click_link_or_button

セレクターを呼び出します:link_or_button。このセレクターはここで定義されています: https://github.com/jnicklas/capybara/blob/master/lib/capybara/selector.rb#L143

Capybara.add_selector(:link_or_button) do
  label "link or button"
  xpath { |locator| XPath::HTML.link_or_button(locator) }
end

このメソッドを呼び出します: http://rdoc.info/github/jnicklas/xpath/XPath/HTML#link_or_button-instance_method

# File 'lib/xpath/html.rb', line 33

def link_or_button(locator)
  link(locator) + button(locator)
end

だから私はセレクターの存在を確認しようとしましたが、うまくいきました:

page.should have_selector(:link_or_button, 'Click me')
于 2013-01-17T10:57:25.343 に答える
5

期待構文の使用

expect(page).to have_selector(:link_or_button, 'Click me')

これは、カスタムマッチャーを定義する必要なく機能します。

于 2016-12-13T08:52:49.090 に答える
2

カスタムマッチャーを使用することもできます

RSpec::Matchers::define :have_link_or_button do |text|
  match do |page|
    Capybara.string(page.body).has_selector?(:link_or_button, text: text)
  end
end

それからする

expect(page).to have_link_or_button('Login')
于 2013-04-18T00:30:12.857 に答える
1

個人的には、ボタンまたはリンクにIDを付けて、それを使用して探します

page.should have_css('#foo')

このようにして、実装を気にせずにリンクまたはボタンを参照できます。

私はいつもこれが便利だと思っています: https://gist.github.com/428105

于 2012-12-14T07:56:36.067 に答える
0

検索ボタンインスタンスメソッドを使用できると思います。

(Capybara::Element) find_button(locator)

id、name、valueを使用します。

またはリンクが必要な場合

(Capybara::Element) find_link(locator)

差出人:http ://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Finders#find_button-instance_method

于 2012-12-13T19:30:09.033 に答える
0

html の場合:

<a class="top-menu__item">text123
    <span class="label">
        <span class="label">86</span>
    </span>
</a>

うまくいかない:

  assert page.has_selector?(:link_or_button, text: 'text123')
  assert page.should have_selector(:link_or_button, text: 'text123')
于 2019-06-06T06:47:24.523 に答える