2 votes

Comment puis-je gérer les messages d'erreur de Selenium try except web en python ?

Sur ma page web se trouvent deux types d'erreurs différentes.

La première est :

<div class="warning" data-text="text-field-error" dir="ltr">Diese ID ist nicht verfügbar.</div>

Et la deuxième est :

<div class="separator-notice text-notice text-margin theme-noticeerror-font" dir="ltr">Bei der Verbindung zum Server ist eine Zeitüberschreitung aufgetreten.</div>

Par exemple, si j'essaie le mauvais courriel, il n'y a pas de valeur spécifique quant au nombre de fois que vous pouvez répéter. De temps en temps, c'est différent. Maintenant la première erreur signifie que cet email (dans mon cas ID) n'est pas valide.

La deuxième erreur signifie que la connexion au serveur a échoué. Maintenant, avec Selenium, je veux gérer ces deux erreurs différentes de la manière suivante :

for line in lines:
    driver.find_element_by_id(input_id).send_keys(line)
    driver.find_element_by_class_name(check_available).click()
    count += 1
    time.sleep(1)
    try:
        # Check if I get error one
    except:
        # I got an error two
    else:
       pass

J'ai déjà regardé sur stack mais je n'ai rien trouvé qui corresponde à mes besoins. J'ai également essayé avec xpath par texte comme ceci :

try:
    driver.find_element_by_xpath("//div[contains(text(), ' Diese ID ist nicht verfügbar.')]")
except:
      # It has to be error two

Donc ma question est : Comment puis-je vérifier quelle erreur j'ai actuellement et comment puis-je travailler avec cette erreur. Par exemple

if error1:
   print("error_one")
if error2:
   print("error_two")

1voto

Eliyahu Points 1177

Vous pouvez le faire même sans try - except du tout.
Vous pouvez faire quelque chose comme ça :

for line in lines:
    driver.find_element_by_id(input_id).send_keys(line)
    driver.find_element_by_class_name(check_available).click()
    count += 1
    time.sleep(1)
    first = driver.find_elements_by_xpath("//div[contains(text(), 'Diese ID ist nicht verfügbar.')]")
    second = driver.find_elements_by_xpath("//div[contains(text(), 'Bei der Verbindung zum Server ist eine Zeitüberschreitung aufgetreten')]")
    if first:
        #you have got the first notification
    if second:
        #you have got the second notification

Vous pouvez également le faire avec les conditions attendues et avec try - except mais cette approche semble être la plus simple.

0voto

New contributor Points 31198

Pour détecter les deux erreurs, vous devez intégrer la validation dans un fichier de type essayer-excepter{} induisant un blocage WebDriverWait para la visibilité_de_l'élément_localisé() et vous pouvez utiliser les éléments suivants Stratégies de localisation :

for line in lines:
    driver.find_element_by_id(input_id).send_keys(line)
    driver.find_element_by_class_name(check_available).click()
    count += 1
    time.sleep(1)
    try:
        WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[contains(., 'Diese ID ist nicht verfügbar.')]")))
    except TimeoutException:
        WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[contains(,, 'Bei der Verbindung zum Server ist eine Zeitüberschreitung aufgetreten.')]")))

Nota : Vous devez ajouter les importations suivantes :

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X