【问题标题】:Cannot find link using Capybara and Rspec while writing an integration test在编写集成测试时找不到使用 Capybara 和 Rspec 的链接
【发布时间】:2017-10-12 17:00:37
【问题描述】:

我正在尝试通过 CSS 类和 ID 查找链接,但总是出错:Capybara::ElementNotFound: Unable to find css ...

实际的一段代码是:

find('#bucket_resources_containers > #user_base_widget.widget > 
div.widget_header > div.right.may-
edit.control.button.add.icon.add_options > a.tasksy.options').click

页面来源为:enter image description here

【问题讨论】:

  • 由于您尝试点击的元素没有内容,它实际上在页面上是否有任何大小?如果不是,它将被视为不可见。此外,使用特定的选择器只会使您的测试变得非常脆弱,至少不需要一个 id 选择器,因为另一个应该仍然唯一地标识一个元素,并且您指定的大多数类可能是不必要的。
  • @ThomasWalpole,我知道它应该类似于find('#bucket_resources_containers > #user_base_widget > div > div > a').click,但只找到第一个div元素'#bucket_resources_containers
  • @ThomasWalpole 元素不可见。一切正常。
  • 实际上它应该是唯一标识您想要的元素的最小相关选择器 - 在显示的情况下,假设我猜测不同类的含义是正确的,我可能会做类似的事情. find('#user_base_widget .widget_header .add_options a.options')

标签: ruby ruby-on-rails-4 capybara rspec-rails


【解决方案1】:

您在评论中给了我们答案,该元素不可见。

简答find_link(selector, visible: :all).click

正如水豚在documentation 中显示的那样:

默认情况下,Capybara 只会定位可见元素。这是因为真实用户无法与不可见元素进行交互

只定位可见元素是capybara的一个聪明设计,它避免了用户可以找到元素的想法。

find_linkmethod documentation 在查找隐藏链接时没有多大帮助,因为它只显示这些选项:wait, href, id, title, alt, class

#find_link([locator], options = {}) ⇒ Capybara::Node::Element

但是您在finding documentation 上看到有一个visible 选项:

find_link('Hello', :visible => :all).visible?
find_link(class: ['some_class', 'some_other_class'], :visible => :all).visible?

这个选项visible来自#all方法where you can see here。它可以有这些值:

true - only finds visible elements.
false - finds invisible and visible elements.
:all - same as false; finds visible and invisible elements.
:hidden - only finds invisible elements.
:visible - same as true; only finds visible elements.

因此,在您的情况下,您可以使用 visible: false,如果您真的想隐藏它,或者使用 visible: :all,如果您不关心可见性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多