web-dev-qa-db-fra.com

Capybara: comment vérifier la valeur TEXT d'un élément avec xpath et css?

Essayer de faire échouer ce test sans succès.

J'ai ce code HTML:

<div id="navigation">
 <ul>
  <li>
   <a href="/url">TV</a>

Et puis j'essayais d'identifier le texte de l'élément A et de le faire échouer pour le moment.

J'ai utilisé toutes les expressions suivantes avec Xpath, mais toutes continuent de passer même si j'utilise un texte différent pour la comparaison: S

page.should have_xpath("//div[@id='navigation']//a", :content => 'Radio')
page.should have_xpath("//div[@id='navigation']//a", :text => 'Radio')
page.should have_xpath("//div[@id='navigation']//a[contains(string(),'Radio')]")
page.should have_xpath("//div[@id='navigation']//a[contains(text(),'Radio')]")
page.should have_xpath("//div[@id='navigation']//a[contains(.,'Radio')]")

Avez-vous une idée de la manière dont je pourrais identifier le texte d'un élément HTML spécifique avec capybara? et ... est-il possible d'obtenir la même chose avec CSS?

À votre santé!

13
mickael

Il s'est avéré qu'il y avait un autre élément avec le texte "Radio" dans le DIV "Navigation", ce qui a provoqué l'échec du test.

Pour référence future, l’identification du 1er élément s’est explicitement comportée comme prévu et échoue au test:

page.first('div#navigation a').text.should == 'Radio')
page.first('div#navigation a').text.should eq('Radio')
page.first('div#navigation a').text.should match('Radio')
page.first('div#navigation a').text.should be('Radio')
12
mickael

A partir de RSpec 2.11 (juillet 2012), le moyen préféré consiste à utiliser la syntaxe expect:

expect(page).to have_css("#navigation a", text: "Radio")

Vous pouvez configurer RSpec pour n'accepter que cette nouvelle syntaxe afin de garder votre base de code cohérente.

15
Jan Klimo

Mettre ceci ici pour que je puisse le trouver la prochaine fois que je me heurte à cela. : P

Mon html ressemble à ceci:

<a href="https://foo.com" id="foo-link">@foo</a>

Je veux trouver le texte et la valeur d'URL et affirmer qu'ils sont corrects. En utilisant Capybary 2.16, Rails 5.1 et minitest, voici comment j'ai procédé:

assert_selector 'a#foo-link[href="https://foo.com"]', text: '@foo'

Si l'ID, le texte ou la valeur href changent, le test échouera.

0
Donn Felker

Ça va vous aider:

page.should have_css ('div # navigation a',: text == 'Radio')

essaye ça.

0
NMKP