Cucumber 和 Capybara,单击非链接或按钮元素

Posted

技术标签:

【中文标题】Cucumber 和 Capybara,单击非链接或按钮元素【英文标题】:Cucumber and Capybara, clicking a non-link or button element 【发布时间】:2011-04-04 20:57:06 【问题描述】:

我正在尝试使用 Cucumber/Capybara/Selenium 堆栈测试就地编辑器,但我的问题是编辑器是通过单击 div 而不是链接或按钮激活的。我似乎无法弄清楚如何让 Capybara 做到这一点。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

除了可以像@Jim Mitchener 解释的那样点击按钮元素外,您还可以通过以下方式点击文本的一部分:

# WhenI click on the text "Sign in"
When(/^I click on text "(.*?)"$/) do |text|
  click_text(text)
end

def click_text(text)
  elem = find(:xpath, "//*[contains(translate(text(), '#text.upcase', '#text.downcase'), '#text.downcase')]", match: :first, wait: false)
  scroll_to(elem, -200)
  elem.click
end

这个辅助函数和find(selector).click做同样的事情,它找到文本元素。

我发现this article 很好,它解释了你可以用黄瓜写的不同类型的步骤。

【讨论】:

【参考方案2】:

你可以通过Capybara::Element.click点击一个元素。我在web_steps.rb 中为此添加以下内容以单击 div。

When /^(?:|I )click within "([^"]*)"$/ do |selector|
  find(selector).click
end

还有Element.trigger('mouseover') 似乎可以启用悬停,尽管它不适用于 Selenium。

您也很可能需要使用 Capybara 提供的 @javascript 标签来装饰您的功能/场景。

【讨论】:

完美!正是我所追求的。

以上是关于Cucumber 和 Capybara,单击非链接或按钮元素的主要内容,如果未能解决你的问题,请参考以下文章

Cucumber, capybara and selenium - 无需按钮即可提交表单

Rails Cucumber使用Capybara测试AJAX

Rails、Cucumber、Capybara:会话不持久

使用 Cucumber 和 Capybara-Webkit 在 Rails 4 上进行 typeahead.js 测试失败

Rails + Cucumber/Capybara:如何在测试中设置/检索 cookie?

如何使用rails cucumber,rspec,capybara在视图(dhtml)中测试动态部分?