76

要素に 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

誰でもこれを行う方法を知っていますか?

4

10 に答える 10

68

HTML DOMinnerHTMLプロパティを呼び出すことができます。

find('//tr[2]//td[7]')['innerHTML']

どのブラウザまたはドライバでも動作するはずです。w3schoolsで利用可能なすべてのプロパティを確認できます

于 2014-05-18T19:30:38.473 に答える
26

この投稿は古いですが、まだこれが必要な場合は方法を見つけたと思います。

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>"

最後の部分はあなたによって異なるかもしれませんが、そのノード変数のどこかにHTMLを見つけることができるはずです

于 2011-06-07T01:33:13.473 に答える
19

私の環境では、findはCapybara :: Elementを返します。これは、前述のEric Huのように:nativeメソッドに応答し、Selenium :: WebDriver :: Element(私にとって)を返します。次に、:textがコンテンツを取得するため、次のように単純にすることができます。

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

テーブルセルの内容を探している場合。Capybara :: Elementには、content、inner_html、inner_text、またはnodeメソッドはありません。人々が物事を作り上げているだけではないと仮定すると、おそらく、カピバラを他に何を積んでいるかによって、見つけることとは異なる何かを取り戻すことができます。

于 2013-03-15T18:11:03.837 に答える
12

(node).native.inner_htmlたとえば、次のような HTML を使用して、HTML コンテンツを取得することができるようです。

<div><strong>Some</strong> HTML</div>

次のことができます。

find('div').native.inner_html
=> '<strong>Some</strong> HTML'
于 2013-09-23T23:12:04.327 に答える
1

find('//tr[2]//td[10]').node実際ののこぎりオブジェクトを取得するためにそれを呼び出してみてください

于 2010-11-19T18:10:24.333 に答える
1

Poltergeist ドライバーを使用している場合、これらのメソッドを使用すると、一致するものを調べることができます。

http://www.rubydoc.info/gems/poltergeist/1.5.1/Capybara/Poltergeist/Node

例えば:

page.find('[name="form-field"]').native.value == 'something'
于 2014-11-05T00:15:08.717 に答える
0

まあ、カピバラは Nokogiri を使って解析するので、このページが適切かもしれません:

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

私はcontentあなたが探している方法だと信じています。

于 2010-11-05T00:13:08.877 に答える
0

capybara-uiに切り替えて、次のことを行うこともできます。

# 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>)
于 2016-01-22T16:11:01.783 に答える