Ich versuche, eine komplizierte Javascript-Oberfläche mit Selenium zu testen (über die Python-Oberfläche und über mehrere Browser hinweg). Ich habe eine Reihe von Schaltflächen des Formulars:
<div>My Button</div>
Ich möchte in der Lage sein, nach Schaltflächen zu suchen, die auf "Meine Schaltfläche" basieren (oder nach nicht übereinstimmenden Teilübereinstimmungen wie "Meine Schaltfläche" oder "Schaltfläche").
Ich finde das erstaunlich schwierig, in dem Maße, in dem ich das Gefühl habe, etwas Offensichtliches zu vermissen. Das Beste, was ich bisher habe, ist:
driver.find_elements_by_xpath('//div[contains(text(), "' + text + '")]')
Dies unterscheidet jedoch zwischen Groß- und Kleinschreibung. Das andere, was ich versucht habe, ist, alle Divs auf der Seite zu durchlaufen und die Eigenschaft element.text zu überprüfen. Jedes Mal, wenn Sie eine Situation des Formulars erhalten:
<div class="outer"><div class="inner">My Button</div></div>
div.outer hat auch "My Button" als Text. Um DAS zu beheben, habe ich versucht zu prüfen, ob div.outer das übergeordnete Element von div.inner ist, konnte jedoch nicht herausfinden, wie dies zu tun ist (element.get_element_by_xpath ('..') gibt das übergeordnete Element eines Elements zurück, aber es Tests ungleich div.outer). Außerdem scheint das Durchlaufen aller Elemente auf der Seite sehr langsam zu sein, zumindest mit dem Chrome-Webdriver.
Ideen?
Edit: Diese Frage kam etwas vage heraus. Hier wurde eine spezifischere Version gefragt (und beantwortet): Wie kann man Text eines Elements in Selenium WebDriver (über die Python-API) abrufen, ohne untergeordneten Elementtext einzuschließen?