【问题标题】:Find hidden element in capybara在水豚中找到隐藏的元素
【发布时间】:2017-05-12 02:11:03
【问题描述】:

学习“水豚”,遇到了通过水豚寻找隐藏元素的问题。

在 HTML 中,我们有一个文件字段,默认情况下是“显示:无”。 HTML 元素是:

<input class="some_class" id="some_id" name="some_name" type="file">

现在,当我使用 cucumber 在 capybara 中编写测试用例时,我在 capybara 脚本中找不到这个元素。我的水豚脚本正在寻找这样的元素:

find(:xpath, "//input[@name='some_name']")

阅读隐藏元素并了解设置

Capybara.ignore_hidden_elements = false

应该可以解决我的问题。但是我在其他地方读到上面的设置是默认的。因此,尝试了其他明确传递它的选项。喜欢:

find(:xpath, "//input[@name='some_name']", :visible => false)

那也没用。还有什么我应该尝试的吗?如果有人感兴趣,我们很乐意分享更多细节。

【问题讨论】:

    标签: cucumber capybara


    【解决方案1】:

    可见选项有一些潜在价值

    1. true:visible => 只找到可见元素
    2. false:all => 查找可见和不可见元素
    3. :hidden => 只找到不可见的元素

    因此,如果您尝试find(:xpath, "//input[@name='some_name']", :visible =&gt; false) 没有返回元素,则页面中没有与该 XPath 匹配的元素,您需要检查页面的内容是否与您认为的一样(page.html, page.save_screenshot 等)

    除此之外,您的示例还有一些问题。首先,你掉进了XPath // trap。如果(并且应该是一个很大的如果)您将大量使用 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 是一个糟糕的主意,因为它会导致测试实际上并没有测试用户可以看到/执行的内容。

    【讨论】:

    • 我遇到了这个问题,但是 3. :hidden 似乎不受支持。 find_field(field_id, visible: false).visible? #true 因为正如您在第 2 点中提到的,它会找到所有元素,无论是否可见。但是find_field(field_id, hidden: true) #ArgumentError Exception: invalid keys :hidden
    • @con-- 选项是“可见的”,值是 :hidden - find_field(field_id, visible: :hidden)
    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多