Comment cliquer sur le premier lien dans ce cas:
<div class="item">
<a href="/agree/">Agree</a>
</div>
<div class="item">
<a href="/agree/">Agree</a>
</div>
within ".item" do
first(:link, "Agree").click
end
et j'obtiens cette erreur:
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching css ".item"
Et sans le within
je reçois cette erreur:
Failure/Error: first(:link, "Agree").click
NoMethodError:
undefined method `click' for nil:NilClass
Essayez ce qui suit:
Sources:
la source
Cette formulation fonctionne également:
la source
Xpath peut adresser l'élément. Je ne suis pas encore très bon avec ça, mais quelque chose comme
//div[@class='active'][1]/a
Cela peut ou non fonctionner, mais le fait est que xpath peut adresser un tableau de correspondances et en extraire une en particulier. Vous devriez pouvoir correspondre avec cela.
Un exemple concret d'un de mes projets:
la source
Puisque first () n'attend pas toujours, c'est peut-être utile:
la source
la plupart de ces solutions n'utiliseront pas les brillantes fonctionnalités d'attente de Capybara
mieux faire comme ce lien le suggère:
https://thoughtbot.com/blog/write-reliable-asynchronous-integration-tests-with-capybara#find-the-first-matching-element
Mauvais:
first(".active").click
S'il n'y a pas encore d'élément .active sur la page, first retournera nul et le clic échouera.
Bien:
Si vous voulez vous assurer qu'il y en a exactement un
find(".active").click
Si vous voulez juste que le premier élément,
find(".active", match: :first).click
Capybara attendra que l'élément apparaisse avant d'essayer de cliquer.
Notez que
match: :first
c'est plus fragile, car il cliquera silencieusement sur un élément différent si vous introduisez de nouveaux éléments qui correspondent.la source
Simple, vous pouvez utiliser:
la source