Je travaille sur les tests d'automatisation sélénium basés sur Python et je suis nouveau dans ce Tech.Je besoin de cliquer sur le rapport d'activité dans le code ci-dessous.
Traceback (most recent call last):
File "F:/Python/test1/T1.py", line 21, in <module>
driver.find_element_by_css_selector('#form1 > div:nth-child(3) >
div.row
> div > a:nth-child(2) > div').click()
File "C:\Python36\selenium\webdriver\remote\webelement.py", line 80, in
click
self._execute(Command.CLICK_ELEMENT)
File "C:\Python36\selenium\webdriver\remote\webelement.py", line 633,
in _execute
return self._parent.execute(command, params)
File "C:\Python36\selenium\webdriver\remote\webdriver.py", line 321, in
execute
self.error_handler.check_response(response)
File "C:\Python36\selenium\webdriver\remote\errorhandler.py", line 242,
in check_response
raise exception_class(message, screen, stacktrace)
3 Réponses :
driver.find_element_by_css_selector (sélecteur css) # remplace 'css selector' comme ci-dessous
Cela utilise quelque chose appelé un sélecteur css qui est capable d'identifier de manière unique les éléments d'un site Web. Pour trouver le sélecteur CSS unique que je recommanderais d'utiliser Google Chrome ou Chromium, je n'ai pas encore trouvé comment obtenir le sélecteur css dans Firefox. Ouvrez le site Web souhaité dans Chrome, appuyez ensuite sur CTRL + Maj + C pour ouvrir l'outil d'inspecteur et cliquez sur l'élément sur lequel vous voulez que votre script Cliquez sur. Après cela, faites un clic droit sur l'élément surligné en bleu et sélectionnez Copier> Copier le sélecteur . Voici une capture d'écran de l'élément de menu à sélectionner au cas où ce serait un peu trop verbeux.
Oh allez, ce n'est pas une solution :) OP sait qu'il doit utiliser la méthode find_element_by_css_selector () , c'est littéralement dans la première ligne de l'exception. Ce qu'il recherche évidemment, c'est le bon sélecteur à utiliser.
Désolé, cela n'a pas aidé, je pense que cela vaut la peine d'essayer
L'extrait ci-dessous devrait certainement fonctionner pour vous:
lst_menu = driver.find_elements_by_xpath("//div[@class='col-sm-2 col-md-2 col-lg-2 menu-button']")
for item in lst_menu:
if (item.get_attribute("text") == 'Activity Report'):
item.click()
Si ci-dessus ne fonctionne pas, ci-dessous devrait également fonctionner:
driver.find_element_by_xpath("//div[@class='col-sm-2 col-md-2 col-lg-2 menu-button'][contains(text(),'Activity R')]")
p >
toujours je reçois le même genre d'erreur.pls aidez-moi à ce sujet ... toutes les autres choses sont faites.à cause de cette ligne, mon travail est resté bloqué
Pas de frère, même erreur, j'ai demandé à l'équipe de développement d'ajouter un identifiant là-bas ... mais le problème n'est pas résolu
try
driver.find_element_by_xpath("//div[contains(@class, 'col-sm-2') and contains(@class ,'col-md-2') and contains(@class ,'col-lg-2') and contains(@class, 'menu-button') and contains(text(), 'Activity Report')]")
ou plus radical
driver.find_element_by_xpath("//div[contains(text(), 'Activity Report')]")
Merci frère..still pas corrigé.
Vous pouvez essayer d'installer une extension chrome comme ChroPath ou simialr pour vérifier si xpath est valide pour la page ... si aucun ne fonctionne par le haut, cela peut signifier que l'élément n'est pas visible ou accessible par le pilote Web.
D'accord, merci, je vais le vérifier
Ajoutez un extrait plus grand du HTML - le localisateur que vous avez utilisé semble assez profond,
form1> div: nth-child (3)> div.row> div> a: nth-child (2)> div, il y a plus à cela. Sinon, regardez la solution de @Pooja - son xpath localise l'élément par son texte (l'un des nombreux avantages de xpath sur css).