gpt4 book ai didi

cucumber - 在 capybara 中查找隐藏的元素

转载 作者:行者123 更新时间:2023-12-04 17:16:13 25 4
gpt4 key购买 nike

学习“ capybara ”并碰到通过 capybara 寻找隐藏元素的问题。

在HTML中,我们有一个默认为'display:none'的文件字段。 HTML元素是:

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

现在,当我使用 cucumber 在 capybara 上编写测试用例时,在 capybara 脚本中找不到此元素。我的 capybara 脚本正在查找元素,就像这样:
find(:xpath, "//input[@name='some_name']")

阅读有关隐藏元素的信息,并了解该设置
Capybara.ignore_hidden_elements = false

应该解决我的问题。但是我在其他地方读到,以上设置是默认设置。因此,尝试了其他显式传递选项。喜欢:
find(:xpath, "//input[@name='some_name']", :visible => false)

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

最佳答案

可见选项有一些潜在值(value)

  • true:visible =>仅查找可见元素
  • false:all =>查找可见和不可见元素
  • :hidden =>仅查找不可见元素

  • 因此,如果您对 find(:xpath, "//input[@name='some_name']", :visible => 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是一个糟糕的主意(如果只是进行自动化,那很好),因为它导致的测试实际上并未测试用户可以看到/做什么。

    关于cucumber - 在 capybara 中查找隐藏的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43908750/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com