Rails 的水豚:如何只查找不可见元素

Capybara with Rails: how to find ONLY invisible elements

我在 Rails 项目(Rails 5.2.0).

中使用 Capybara(capybara 3.1.0) 进行系统测试

如何保证元素不可见

我一直在使用 visible: false 选项,直到我发现它也匹配可见元素。

例如我使用:

find("h1", visible: false).text

无一例外,控制台打印h1的文字,而h1肯定是可见的。

这是预期的吗?这种行为背后的逻辑是什么?确保元素不可见的正确方法是什么?

当 Capybara 首次发布时,visible 的值(true 或 false)意味着启用或禁用可见性过滤器,出于遗留测试原因一直存在。您还可以指定 :visible、:hidden、:all (https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/Node/Finders#find-instance_method) 的值,其中 :visibletrue 的行为相同,:all 与 [=14= 的行为相同] 和 :hidden 将 return 只有不可见元素。

这意味着您的 find 需要变成

find("h1", visible: :hidden).text(:all)

如果需要文本,则需要使用 :all 参数,因为 text 默认仅显示文本 (https://www.rubydoc.info/github/jnicklas/capybara/Capybara/Node/Element#text-instance_method)