Maison > interface Web > tutoriel CSS > Pourquoi « span:contains('string') » échoue-t-il dans Selenium avec Firefox et comment puis-je y remédier ?

Pourquoi « span:contains('string') » échoue-t-il dans Selenium avec Firefox et comment puis-je y remédier ?

DDD
Libérer: 2024-12-29 04:29:10
original
695 Les gens l'ont consulté

Why Does

Une exception de sélection non valide se produit avec "span:contains('string')" dans Selenium avec Firefox

Lors de la tentative de localisation d'un élément par CSS sélecteur dans Selenium Python avec Firefox, l'expression "span:contains('Control panel')" peut rencontrer une InvalidSelectorException avec le message "Étant donné que l'expression du sélecteur CSS 'span:contains('Control panel')' n'est pas valide."

Comme expliqué dans les numéros GitHub n°987 et n°1547, la pseudo-classe :contains n'est pas prise en charge dans la spécification CSS. et n'est donc pas reconnu par Firefox. Cette pseudo-classe faisait partie du moteur de sélection Sizzle utilisé dans Selenium 1.0, mais WebDriver ne prend pas en charge les sélecteurs CSS de style Sizzle.

Pour les navigateurs qui ne prennent pas en charge nativement les sélecteurs CSS (tels que IE7 et IE8), :contains peut toujours fonctionner, entraînant des incohérences entre les différents navigateurs. Une approche plus fiable consisterait à utiliser un autre attribut de la balise span, tel que :

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

Solutions alternatives :

Si l'élément prévu est un span avec le texte "Panneau de configuration", vous pouvez utiliser l'une des expressions XPath suivantes en fonction du DOM en vigueur Arbre :

  • Utilisation de text() :

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

    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 :

jQuery prend également en charge la pseudo-classe :contains, permettant vous d'utiliser l'expression suivante :

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

Supplémentaire Remarque :

N'oubliez pas que les sélecteurs CSS ne sont pas pris en charge nativement par la console du navigateur, mais jQuery les prend en charge via le raccourci $('...'), qui remplace généralement la méthode document.querySelector par défaut.

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.cn
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