67 votes

Comment obtenir le code HTML dans un élément utilisant Capybara?

J'écris un test de concombre où je veux obtenir le HTML dans un élément.

Par exemple:

 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
 

Quelqu'un sait-il comment faire ça?

55voto

user3134810 Points 21

Si vous utilisez Selenium, vous pouvez appeler l'attribut Selenium innerHTML entre crochets:

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

25voto

Eric Hu Points 7388

Cet article est vieux, mais je pense avoir trouvé un moyen de continuer si vous en avez toujours besoin.

Pour accéder au nœud Nokogiri à partir de l'élément Capybara (avec Capybara 1.0.0beta1, Nokogiri 1.4.4), essayez ceci:

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

La dernière partie peut varier pour vous, mais vous devriez pouvoir trouver le code HTML quelque part dans cette variable de noeud.

18voto

Steve Points 191

Dans mon environnement, trouver retourne un Capybara::l'Élément qui répond à la :méthode native, comme Eric Hu mentionné ci-dessus, qui renvoie une Sélénium::WebDriver::Element (pour moi). Alors :texte est le contenu, de sorte qu'il pourrait être aussi simple que:

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

si vous êtes à la recherche pour le contenu d'une cellule de tableau. Il n'y a pas de contenu, inner_html, inner_text, ou nœud de méthodes sur un Capybara::Element. En supposant que les personnes ne sont pas juste de faire les choses, peut-être que vous obtenez quelque chose de différent de retour de trouver en fonction de ce que vous avez chargé avec le Capybara.

7voto

Tobias Cohen Points 14390

On dirait que vous pouvez faire (node).native.inner_html pour obtenir le contenu HTML, par exemple avec HTML comme ceci:

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

Vous pouvez faire ce qui suit:

 find('div').native.inner_html
=> '<strong>Some</strong> HTML'
 

4voto

Andrey Botalov Points 6566

La plupart des autres réponses ne fonctionnent que dans Racktest (car elles utilisent des fonctionnalités spécifiques à Racktest).

Si votre pilote prend en charge l'évaluation javascript (telle que Selenium), vous pouvez utiliser innerHTML :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X