在水豚中找到隐藏元素

问题描述 投票:0回答:2
cucumber capybara
2个回答
26
投票

可见选项有一些潜在价值

  1. true
    :visible
    => 仅查找可见元素
  2. false
    :all
    => 查找可见和不可见元素
  3. :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
是一个糟糕的主意,因为它会导致测试实际上并没有测试用户可以看到/执行的操作。


0
投票

find_field('some[name]', type: :hidden)

其他一些选项可能在历史上有效,但这对我来说适用于水豚(3.39.2)。

© www.soinside.com 2019 - 2024. All rights reserved.