在水豚中找到隐藏的元素

时间:2017-05-11 07:09:19

标签: cucumber capybara

学习'水豚'并且遇到了通过水豚找到隐藏元素的问题。

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

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

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

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

了解隐藏的元素并了解该设置

Capybara.ignore_hidden_elements = false

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

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

这也行不通。还有什么我应该尝试的吗?如果有兴趣的话,很乐意分享更多细节。

1 个答案:

答案 0 :(得分:8)

可见选项有一些潜在的值

  1. true:visible =&gt;只查找可见元素
  2. false:all =&gt;找到可见和不可见的元素
  3. :hidden =&gt;只找到不可见的元素
  4. 因此,如果您find(:xpath, "//input[@name='some_name']", :visible => false)的尝试没有返回元素,则页面中没有与该XPath匹配的元素,您需要检查该页面的内容是否符合您的想法( page.html,page.save_screenshot等)

    除此之外,您的示例还有一些问题。首先,你落入XPath // trap。如果(并且它应该是一个很大的问题)你将会大量使用XPath查询来查找你的元素,习惯用.//开始查询,而不仅仅是// - 如果你没有&# 39;你是否正在击败所有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是一个糟糕的想法,如果你正在测试一个应用程序(如果只是做自动化它很好),因为它会导致测试不是实际测试用户可以看到/做的事情。