使用Capybara和RSpec时,查看页面上可用的元素

时间:2016-04-14 12:25:17

标签: testing rspec capybara

我正在使用RSpec和Capybara进行测试。我正在使用binding.pry来测试一些代码行;然而,Capybara无法找到我需要的元素。是否有一个命令会列出可供我用作选择器的html元素?

仅供参考,这是我的第一个问题,我在尝试之前尽可能地进行研究......

2 个答案:

答案 0 :(得分:2)

没有内置方法可以做到这一点,但是根据您使用的驱动程序,您可以获得类似于您所要求的内容。如果使用其中一个支持:scope伪类的真实浏览器驱动程序,则可以执行类似

的操作
find("form.***").all(':scope > *').map {|el| el['outerHTML']}

如果否:真实浏览器中的范围支持可以使用xpath

find("form.***").all(:xpath, './/child::*').map {|el| el['outerHTML']}

如果使用默认的机架测试驱动程序,您可以执行类似

的操作
find("form.***").all('> *').map {|el| el.native.to_s }

这些将为您提供一个html元素数组,这些元素是您初始查找的子元素,并让您查看它们具有的类/属性/等,并且显然可以转换为更易于使用的方法。虽然这是可能的,但请注意,在使用Capybara时指定选择器中的每个祖先可能导致脆弱的测试,如果您对页面进行了更改,并且通常最好使用capybara提供的选择器和定位器找到可能的特定元素进行交互。

答案 1 :(得分:0)

您可以尝试在撬开会话中打印page.body。它将打印当前文档的DOM快照。

Capybara文档阅读可能有点棘手。您需要知道的是page is equivalent to Capybara.current_sessionCapybara::Session实例has the method body,其中包含DOM的快照。