Heim >Web-Frontend >CSS-Tutorial >Warum schlägt „span:contains('string')' in Selenium mit Firefox fehl und wie kann ich das Problem beheben?

Warum schlägt „span:contains('string')' in Selenium mit Firefox fehl und wie kann ich das Problem beheben?

DDD
DDDOriginal
2024-12-29 04:29:10688Durchsuche

Why Does

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn