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]"
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']")
Utilisation de contain() :
element = my_driver.find_element_by_xpath("//span[contains(.,'Control panel')]")
Utilisation normalize-space() :
element = my_driver.find_element_by_xpath("//span[normalize-space()='Control panel']")
Utilisation de jQuery :
jQuery prend également en charge la pseudo-classe :contains, permettant vous d'utiliser l'expression suivante :
$('span:contains("Control panel")')
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!