Comment résoudre InvalidSelectorException avec \'span:contains(\'string\')\'

DDD
Libérer: 2024-10-18 22:02:03
original
662 Les gens l'ont consulté

How to Resolve InvalidSelectorException with

InvalidSelectorException avec "span:contains('string')"

Lors de la tentative de localisation d'un élément avec le sélecteur CSS "span:contains('Control panel') ", une InvalidSelectorException est rencontrée, affichant l'erreur : "Étant donné l'expression du sélecteur CSS "span:contains('Control panel')" n'est pas valide".

Comme expliqué dans les numéros 987 et 1547, le :contains la pseudo-classe n'est pas incluse dans la spécification CSS et n'est pas prise en charge dans Firefox et Chrome. Cette pseudo-classe était unique au moteur de sélection Sizzle utilisé par Selenium 1.0. Cependant, WebDriver a choisi de ne pas incorporer les sélecteurs CSS de Sizzle, ce qui a entraîné cette incohérence.

Pour résoudre ce problème efficacement, utilisez des attributs alternatifs du tag :

element = "span[attribute_name=attribute_value]"
Copier après la connexion

Solutions alternatives

Pour localiser l'élément à l'aide de l'arborescence DOM fournie, envisagez les options XPath suivantes :

  • Utilisation de text() :

    element = my_driver.find_element_by_xpath("//span[text()='Control panel']")
    Copier après la connexion
  • Utilisation de contient() :

    element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
    Copier après la connexion
  • Utilisation normalize-space() :

    element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")
    Copier après la connexion

Utilisation de jQuery

De plus, vous pouvez utiliser jQuery avec la syntaxe suivante :

$('span:contains("Control panel")')
Copier après la connexion

Observation remarquable

Selon la perspicacité de @FlorentB, les sélecteurs CSS ne sont pas pris en charge par la console, mais jQuery fournit une prise en charge. La syntaxe '$(...)' dans la console représente une notation abrégée pour 'document.querySelector', qui est remplacée par jQuery lors de son inclusion dans la page.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!