Capybara - 单击 class 名称的元素

Capybara - Click element by class name

对于一个看似简单的问题,我已经在这个问题上研究了很长时间,但似乎在 Google 上找不到任何内容。我有一个我需要点击的按钮,它没有 ID,但包含 class

<button class="filter-case-studies" onclick="initBootpag(filterForContentType('CASE STUDIES', searchHits))" type="button">
<b>CASE STUDIES</b>
(2)
</button>

我试过使用 click_on,我现在知道它只适用于链接和按钮,所以当然行不通。这是我目前所拥有的:

When(/^I filter the results to only see case studies$/) do
  click_on('filter-case-studies')
end

我也试过page.find('filter-case-studies').click,这个也不行

page.find(:class, 'filter-case-studies').click 默认为 :css 所以这对我来说也失败了。

有没有办法在 Capybara 中点击 class 名称的元素?

在此先感谢您的帮助。

click_on('.filter-case-studies')

类 需要 . 选择器,id 需要 # 选择器。

在 Capybara 中执行此操作的标准方法是

find('button.filter-case-studies').click

在相对较新的 Capybara 版本中,您应该也可以做到

click_on(class: 'filter-case-studies')

感谢 Schutte 先生提出使用 . 选择器的想法。

最后不得不用page.find(:class, '.filter-case-studies').click。绝对导航栏妨碍了按钮,所以我必须包含 page.execute_script "window.scrollBy(0,500)" 才能完成测试。

find('.filter-case-studies').click 此处推荐 https://robots.thoughtbot.com/write-reliable-asynchronous-integration-tests-with-capybara#find-the-first-matching-element

我有一个使用上述方法找不到的按钮 (Unable to find visible link or button nil with classes [close-modal])。

这对我有用:page.execute_script('$.find(".close-modal")[0].click()')