Programing

Capybara를 사용하여 요소에서 HTML을 어떻게 얻습니까?

lottogame 2020. 11. 15. 10:51
반응형

Capybara를 사용하여 요소에서 HTML을 어떻게 얻습니까?


요소에서 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 요소 (Capybara 1.0.0beta1, Nokogiri 1.4.4 사용)에서 Nokogiri 노드에 액세스하려면 다음을 시도하십시오.

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는 위에서 언급 한 Eric Hu와 같이 : native 메서드에 응답하는 Capybara :: Element를 반환합니다.이 메서드는 Selenium :: WebDriver :: Element를 반환합니다. 그런 다음 : text가 내용을 가져 오므로 다음과 같이 간단 할 수 있습니다.

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

표 셀의 내용을 찾는 경우. Capybara :: Element에는 콘텐츠, inner_html, inner_text 또는 노드 메서드가 없습니다. 사람들이 단순히 물건을 만드는 것이 아니라고 가정하면 Capybara로 무엇을로드했는지에 따라 다른 것을 찾을 수 있습니다.


(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 에 따라 Capybara :: Poltergeist :: Node 의 HTML에 액세스하는 방법 outerHTML 속성을 통해 이루어집니다. 예 :

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

대부분의 다른 답변은 Racktest에서만 작동합니다 (Racktest 관련 기능을 사용하므로).

드라이버가 자바 스크립트 평가 (예 : Selenium)를 지원하는 경우 다음을 사용할 수 있습니다 innerHTML.

html = page.evaluate_script("document.getElementById('my_id').innerHTML")

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

참고 URL : https://stackoverflow.com/questions/4071937/how-do-i-get-the-html-in-an-element-using-capybara

반응형