Web ページのユーザーは、「ボタン」と「ボタン スタイルのリンク」を区別しません。「ボタンまたはリンク」がページに存在するかどうかのチェックを追加する方法はありますか?
たとえば、カピバラには次のステップがあります。
page.should have_button('Click me')
ボタンとしてスタイル設定されたリンクは見つかりません。
Web ページのユーザーは、「ボタン」と「ボタン スタイルのリンク」を区別しません。「ボタンまたはリンク」がページに存在するかどうかのチェックを追加する方法はありますか?
たとえば、カピバラには次のステップがあります。
page.should have_button('Click me')
ボタンとしてスタイル設定されたリンクは見つかりません。
更新された回答 (マッチャーは 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')
期待構文の使用
expect(page).to have_selector(:link_or_button, 'Click me')
これは、カスタムマッチャーを定義する必要なく機能します。
カスタムマッチャーを使用することもできます
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')
個人的には、ボタンまたはリンクにIDを付けて、それを使用して探します
page.should have_css('#foo')
このようにして、実装を気にせずにリンクまたはボタンを参照できます。
私はいつもこれが便利だと思っています: https://gist.github.com/428105
検索ボタンインスタンスメソッドを使用できると思います。
(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
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')