如何使用Capybara在元素中获取HTML?

Jon*_*ger 66 cucumber capybara

我正在写一个黄瓜测试,我想在一个元素中获取HTML.

例如:

within 'table' do
  # this works
  find('//tr[2]//td[7]').text.should == "these are the comments" 

  # I want something like this (there is no "html" method)
  find('//tr[2]//td[7]').html.should == "these are the <b>comments</b>" 
end
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做吗?

lli*_*err 55

您可以调用HTML DOM innerHTML属性:

find('//tr[2]//td[7]')['innerHTML']
Run Code Online (Sandbox Code Playgroud)

适用于任何浏览器或驱动程序.您可以查看w3schools上的所有可用属性

  • 也适用于'poltergeist`. (7认同)

Eri*_* Hu 25

这篇文章很老,但我觉得如果你还需要这个,我找到了一个方法.

要从Capybara元素访问Nokogiri节点(使用Capybara 1.0.0beta1,Nokogiri 1.4.4)试试这个:

elem = find('//tr[2]//td[10]')
node = elem.native
#This will give you a Nokogiri XML element

node.children[1].attributes["href"].value.should == "these are the <b>comments</b>"
Run Code Online (Sandbox Code Playgroud)

最后一部分可能因您而异,但您应该能够在该节点变量中的某处找到HTML


Ste*_*eve 16

在我的环境中,find返回一个Capybara :: Element - 响应上面提到的Eric Hu的native方法,它返回一个Selenium :: WebDriver :: Element(对我来说).然后:文本获取内容,因此它可以像下面这样简单:

results = find(:xpath, "//td[@id='#{cell_id}']")
contents = results.native.text
Run Code Online (Sandbox Code Playgroud)

如果你正在寻找表格单元格的内容.Capybara :: Element上没有content,inner_html,inner_text或node方法.假设人们不仅仅是在制造东西,也许你会从找到的东西中找到不同的东西,这取决于你用Capybara装载的其他东西.


Tob*_*hen 7

看起来你可以做到(node).native.inner_html获取HTML内容,例如使用这样的HTML:

<div><strong>Some</strong> HTML</div>
Run Code Online (Sandbox Code Playgroud)

您可以执行以下操作:

find('div').native.inner_html
=> '<strong>Some</strong> HTML'
Run Code Online (Sandbox Code Playgroud)

  • 不是每个人都为`<Capybara :: Poltergeist :: Node:0x007ff9aa8c59a0>的未定义方法inner_html (8认同)

小智 5

我遇到了与Cyril Duchon-Doris相同的问题,根据https://github.com/teampoltergeist/poltergeist/issues/629,访问Capybara :: Poltergeist :: Node的HTML的方法是通过outerHTML属性,例如:

find('//tr[2]//td[7]')['outerHTML']
Run Code Online (Sandbox Code Playgroud)


Ste*_*oss 0

好吧,Capybara 使用 Nokogiri 来解析,所以这个页面可能合适:

http://nokogiri.org/Nokogiri/XML/Node.html

我相信content这就是您正在寻找的方法。