Ответ 1
Вы можете вызвать HTML DOM innerHTML
Свойство:
find('//tr[2]//td[7]')['innerHTML']
Должен работать для любого браузера или драйвера. Вы можете проверить все доступные свойства на w3schools
Im, пишущий тест огурца, где я хочу получить 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
Этот пост старый, но я думаю, что нашел способ, если вам это еще нужно.
Чтобы получить доступ к Nokogiri node из элемента Capybara (используя 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 где-нибудь в этой переменной node
В моей среде find возвращает Capybara:: Element - который отвечает на собственный метод, как упомянутый выше Eric Hu, который возвращает Selenium:: WebDriver:: Element (для меня). Затем: текст получает содержимое, поэтому он может быть таким же простым, как:
results = find(:xpath, "//td[@id='#{cell_id}']")
contents = results.native.text
если вы ищете содержимое ячейки таблицы. В Capybara:: Element нет методов content, inner_html, inner_text или node. Предполагая, что люди не просто подстраиваются, возможно, вы получаете что-то другое от поиска в зависимости от того, что еще вы загрузили с Capybara.
Похоже, вы можете сделать (node).native.inner_html
, чтобы получить HTML-контент, например, с помощью HTML:
<div><strong>Some</strong> HTML</div>
Вы можете сделать следующее:
find('div').native.inner_html
=> '<strong>Some</strong> HTML'
Большинство других ответов работают только в Racktest (поскольку они используют специальные функции Racktest).
Если ваш драйвер поддерживает оценку javascript (например, Selenium), вы можете использовать innerHTML
:
html = page.evaluate_script("document.getElementById('my_id').innerHTML")
Я столкнулся с тем же вопросом, что и Кирилл Дюшон-Дорис, и за https://github.com/teampoltergeist/poltergeist/issues/629 способ доступа к HTML файлу Capybara:: Полтергейст:: Node через свойство outerHTML, например:
find('//tr[2]//td[7]')['outerHTML']
попробуйте вызвать find('//tr[2]//td[10]').node
на нем, чтобы перейти к фактическому объекту nokogiri
Хорошо, 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'
Вы также можете переключиться на 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>)