Wenn durch partielle Klassennamen Sie so etwas wie <div class="blah menu1 other">Berlin</div>
bedeuten dann könnten Sie tun es nur in einer lesbaren Weise mit so etwas wie
find('div.menu1', exact_text: 'Berlin')
oder
find('div.menu1', text: 'Berlin', exact: true)
Wenn es mehr wie <div class="blah menu1_part other">Berlin</div>
ist können Sie immer noch tun Sie es mit einem besser lesbaren CSS-Selektor wie
find('div[class*=menu1]', exact_text: 'Berlin')
Wenn Sie aus Performancegründen eigentlich alles in einem XPath machen müssen (eine Menge div.menu1
Elemente auf der Seite, wo Sie aus einem verrückten Grund nicht auf einen begrenzten Bereich der Seite zugreifen können), könnten Sie etwas wie
machen
Beachten Sie die führende .
im XPath-Ausdruck. 99,9% der Zeit bei der Verwendung von Capybara und manuell Ihre eigenen XPath-Ausdrücke zu schreiben, möchten Sie Ihre XPath-Ausdrücke mit .//
starten, sonst sind Besiegen Sie jede Scoping Sie getan haben - siehe https://github.com/teamcapybara/capybara#beware-the-xpath--trap
Eine weitere Option ist die xpath
zu verwenden gem Capybara intern verwendet für XPaths zu erzeugen, das wäre so etwas wie
find(:xpath, XPath.css('div.menu1')[XPath.string.n.is('Berlin')], exact: true)
oder
find(:xpath, XPath.css('div[class *= "menu1"]')[XPath.string.n.is('Berlin')], exact: true)
je nach genau das, was meinen Sie mit 01.235.. Der Vorteil, etwas wie das zu tun, ist die Bedeutung der is
Methode, die von contains auf equals geändert werden kann, abhängig vom Wert der exact
Option, und es behandelt auch alle normalizing und escaping von Zeichenfolgen wie notwendig, wenn Ihre Zeichenfolgen nicht als waren einfach wie 'Berlin'