On my web page are two different type of errors.
The first one is:
<div data-text="text-field-error" dir="ltr">Diese ID ist nicht verfügbar.</div>
And the second one is:
<div dir="ltr">Bei der Verbindung zum Server ist eine Zeitüberschreitung aufgetreten.</div>
for example if I try wrong email it doesnt have a specific value how often you can repeat. From time to time its diferent. Now the first error means that this email (in my case ID) isnt valid.
The second errors meaning is that the Server connection has failed. Now with selenium I want to handle these two different errors something like this:
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
Ive already looked around at stack but couldnt find anything that matches my requirements. I also have tried it with xpath by text like this:
try:
driver.find_element_by_xpath("//div[contains(text(), ' Diese ID ist nicht verfügbar.')]")
except:
# It has to be error two
So now is my question: How can i check which error i currently have and how can i work with that error. For example
if error1:
print("error_one")
if error2:
print("error_two")
CodePudding user response:
You can do that even without try - except at all.
You can do something like this:
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
You can also do this with the expected conditions and with try - except, but this approach looks to be the simplest.
CodePudding user response:
To probe both the errors you need to wrap up the validation within a try-except{} block inducing WebDriverWait for the visibility_of_element_located() and you can use the following Locator Strategies:
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.')]")))
Note : You have to add the following imports :
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
