Cucumber 如何使用Capybara在元素中获取HTML?
我正在编写一个cucumber测试,希望在元素中获得HTML 例如:Cucumber 如何使用Capybara在元素中获取HTML?,cucumber,capybara,Cucumber,Capybara,我正在编写一个cucumber测试,希望在元素中获得HTML 例如: page.find('[name="form-field"]').native.value == 'something' 在“表”中 #这很有效 find('//tr[2]//td[7]')。text.should==“这些是注释” #我想要这样的东西(没有“html”方法) find('//tr[2]//td[7]')。html.should==“这些是b命令/b” 结束 有人知道怎么做吗?好吧,水豚使用Nokogiri
page.find('[name="form-field"]').native.value == 'something'
在“表”中
#这很有效
find('//tr[2]//td[7]')。text.should==“这些是注释”
#我想要这样的东西(没有“html”方法)
find('//tr[2]//td[7]')。html.should==“这些是b命令/b”
结束
有人知道怎么做吗?好吧,水豚使用Nokogiri进行解析,所以这个页面可能合适:
我相信
content
是您正在寻找的方法。尝试调用find('//tr[2]//td[10]')。在它上面的node
获取实际的nokogiri对象这篇文章很旧,但如果您仍然需要它,我想我找到了一种方法
要从Capybara元素访问Nokogiri节点(使用Capybara 1.0.0beta1、Nokogiri 1.4.4),请尝试以下操作:
elem=find('//tr[2]//td[10]'))
node=elem.native
#这将为您提供一个Nokogiri XML元素
node.children[1]。属性[“href”].value.should==“这些是b项/b”
最后一部分可能会有所不同,但您应该能够在该节点变量中的某个地方找到HTML。在我的环境中,find返回一个Capybara::Element-它响应于上面提到的:native方法,该方法返回一个Selenium::WebDriver::Element(对于我)。然后:文本获取内容,因此可以简单到:
results=find(:xpath,“//td[@id='{cell\u id}']))
contents=results.native.text
如果要查找表格单元格的内容。Capybara::元素上没有内容、内部html、内部文本或节点方法。假设人们不仅仅是在编造东西,也许你会从find中得到一些不同的东西,这取决于你用Capybara加载的其他东西。大多数其他答案仅在Racktest中有效(因为它们使用Racktest特定的功能) 如果驱动程序支持javascript计算(如Selenium),则可以使用
innerHTML
:
html = page.evaluate_script("document.getElementById('my_id').innerHTML")
看起来您可以执行
(node).native.internal\u html
来获取html内容,例如使用如下html:
<div><strong>Some</strong> HTML</div>
一些HTML
您可以执行以下操作:
find('div').native.inner_html
=> '<strong>Some</strong> HTML'
# define your widget, in this case in your role
class User < Capybara::UI::Role
widget :seventh_cell, [:xpath, '//tr[2]//td[7]']
end
# then in your tests
role = User.new
expect(role.widget(:seventh_cell).html).to eq(<h1>My html</h1>)
find('div').native.inner\u html
=>“一些HTML”
您可以调用HTML DOMinnerHTML
属性:
find('//tr[2]//td[7]')['innerHTML']
适用于任何浏览器或驱动程序。
您可以检查上的所有可用属性如果您使用的是Poltergeist驱动程序,这些方法将允许您检查哪些匹配项: 例如:
page.find('[name="form-field"]').native.value == 'something'
您还可以切换到并执行以下操作:
find('div').native.inner_html
=> '<strong>Some</strong> HTML'
# define your widget, in this case in your role
class User < Capybara::UI::Role
widget :seventh_cell, [:xpath, '//tr[2]//td[7]']
end
# then in your tests
role = User.new
expect(role.widget(:seventh_cell).html).to eq(<h1>My html</h1>)
#定义您的小部件,在本例中是您的角色
类用户
我遇到了与Cyril Duchon Doris相同的问题,访问Capybara::Poltergeist::Node的HTML的方法是通过outerHTML属性,例如:
find('//tr[2]//td[7]')['outerHTML']
没有评论方法。。。尝试执行此操作:
find('//tr[2]//td[10]')。内容
您可以发布实际步骤吗?看看你在这里做什么会很有帮助。我已经完成了page.find(…),并参考了Nokogiri文档来解析响应。也许我只是幸运。。。注意,我说的是page.find。我认为Capybara提供了页面对象,Webrat提供了响应对象。该步骤的内容在原始帖子中。internal\u html()
应该提供给定节点中的所有内容internal_text()
应该为您提供节点内的所有文本。也可以与poltergeist
一起使用。不是每个未定义的方法internal_html for#
都可以使用Selenium,这个答案对我不起作用,但对我有效。