Heim >Web-Frontend >CSS-Tutorial >Warum schlägt „span:contains('string')' in Selenium mit Firefox fehl und wie kann ich das Problem beheben?
Ungültige SelectorException tritt mit „span:contains('string')“ in Selenium mit Firefox auf
Beim Versuch, ein Element per CSS zu finden Selenium Python mit Firefox verwenden, kann der Ausdruck „span:contains('Control panel')“ mit der Meldung auf eine InvalidSelectorException stoßen „Der angegebene CSS-Selektorausdruck ‚span:contains(‘Control panel‘)‘ ist ungültig.“
Wie in den GitHub-Problemen Nr. 987 und Nr. 1547 erläutert, wird die Pseudoklasse „:contains“ in der CSS-Spezifikation nicht unterstützt und wird daher von Firefox nicht erkannt. Diese Pseudoklasse war Teil der Sizzle-Selektor-Engine, die in Selenium 1.0 verwendet wurde, aber WebDriver unterstützt keine CSS-Selektoren im Sizzle-Stil.
Für Browser, die CSS-Selektoren nicht nativ unterstützen (wie IE7 und IE8), :contains funktioniert möglicherweise immer noch, was zu Inkonsistenzen zwischen verschiedenen Browsern führt. Ein zuverlässigerer Ansatz wäre die Verwendung eines anderen Attributs des Span-Tags, wie zum Beispiel:
element = "span[attribute_name=attribute_value]"
Alternative Lösungen:
Wenn das beabsichtigte Element ein Span mit ist Für den Text „Systemsteuerung“ können Sie einen der folgenden XPath-Ausdrücke basierend auf dem vorherrschenden DOM verwenden Baum:
Text() verwenden:
element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
Contains() verwenden:
element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
Verwenden normalize-space():
element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")
Verwendung von jQuery:
jQuery unterstützt auch die Pseudoklasse :contains und ermöglicht so Sie müssen den folgenden Ausdruck verwenden:
$('span:contains("Control panel")')
Zusätzlich Hinweis:
Denken Sie daran, dass CSS-Selektoren nicht nativ von der Browserkonsole unterstützt werden, jQuery sie jedoch über die Verknüpfung $('...') unterstützt, die normalerweise die Standardmethode document.querySelector überschreibt.
Das obige ist der detaillierte Inhalt vonWarum schlägt „span:contains('string')' in Selenium mit Firefox fehl und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!