要素に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
誰もこれを行う方法を知っていますか?
HTML DOM innerHTML
プロパティを呼び出すことができます:
find('//tr[2]//td[7]')['innerHTML']
すべてのブラウザーまたはドライバーで動作するはずです。 w3schools で利用可能なすべてのプロパティを確認できます
この投稿は古いですが、まだ必要な場合は方法を見つけたと思います。
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を見つけることができるはずです
私の環境では、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メソッドはありません。人々が物事を作り上げているだけではないと仮定すると、おそらくあなたはカピバラをロードした他のものに応じて、findとは異なる何かを得るでしょう。
できるように見える(node).native.inner_html
たとえば、次のようなHTMLを使用して、HTMLコンテンツを取得します。
<div><strong>Some</strong> HTML</div>
次のことができます。
find('div').native.inner_html
=> '<strong>Some</strong> HTML'
Cyril Duchon-Dorisと同じ問題に遭遇し、 https://github.com/teampoltergeist/poltergeist/issues/629 のHTMLにアクセスする方法Capybara :: Poltergeist :: NodeはouterHTMLプロパティ経由です。例:
find('//tr[2]//td[7]')['outerHTML']
他の回答のほとんどは、Racktestでのみ機能します(Racktest固有の機能を使用するため)。
ドライバーがjavascript評価(Seleniumなど)をサポートしている場合、innerHTML
を使用できます。
html = page.evaluate_script("document.getElementById('my_id').innerHTML")
find('//tr[2]//td[10]').node
を呼び出して、実際のnokogiriオブジェクトを取得してください
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>)
さて、CapybaraはNokogiriを使用して解析するため、このページが適切な場合があります。
http://nokogiri.org/Nokogiri/XML/Node.html
content
があなたが探している方法だと思います。
Poltergeistドライバーを使用している場合、これらのメソッドを使用すると、一致するものを検査できます。
http://www.rubydoc.info/gems/poltergeist/1.5.1/Capybara/Poltergeist/Node
例えば:
page.find('[name="form-field"]').native.value == 'something'