可见选项有一些潜在价值
true
或 :visible
=> 仅查找可见元素 false
或 :all
=> 查找可见和不可见元素:hidden
=> 只查找不可见元素因此,如果您尝试
find(:xpath, "//input[@name='some_name']", :visible => false)
没有返回元素,则页面中没有与该 XPath 匹配的元素,您需要检查页面的内容是否是您认为的内容(page.html、page.html)。保存_屏幕截图等)
除此之外,您的示例还有一些问题。首先,您陷入了 XPath // 陷阱。如果(这应该是一个很大的如果)您将大量使用 XPath 查询来查找元素,请习惯于以
.//
开始查询,而不仅仅是 // - 如果不这样做,您就失败了Capybara 在页面上的所有范围(within
、链式 find
等)。使用 CSS 选择器不会出现这个问题,因此对于大多数不使用 Capybara 内置选择器类型之一的查询来说更有意义。
find("input[name='some_name']", visible: false)
知道我们正在寻找文件输入,我们可以通过使用 Capybara 的内置 file_field 选择器并执行以下操作来做得更好
find(:file_field, 'some_name', visible: false)
它更容易阅读并准确解释您正在寻找的内容。接下来,由于您找到了一个文件字段,我假设您需要实际向其中添加一个文件。这可能会产生问题,因为通常无法与不可见元素进行交互。然而,由于文件字段经常被隐藏,为了允许样式设置,有一个选项可以帮助解决这个问题。
attach_file('some_name', file_path, make_visible: true)
make_visible: true
选项将临时更改元素CSS以使其可见(如果默认CSS在您的页面上不起作用,您可以将其设置为要设置的CSS值的散列,而不是true
),附加文件到它,然后恢复 CSS 更改。
最后一点,如果您正在测试应用程序(如果只是进行自动化也可以),设置
Capybara.ignore_hidden_elements = false
是一个糟糕的主意,因为它会导致测试实际上并没有测试用户可以看到/执行的操作。
find_field('some[name]', type: :hidden)
其他一些选项可能在历史上有效,但这对我来说适用于水豚(3.39.2)。