Когда вы используете find_element_by_*
и incase не найден, элемент Исключение NoSuchElementException .
Но если вы вызовете WebDriverWait в сочетании с Ожидаемые_условия при ошибке Выдается исключение TimeoutException .
На этом этапе стоит упомянуть, что вы всегда должны ловить желаемое исключение, т.е. либо NoSuchElementException
, либо TimeoutException
, но , а не базовое исключение, т.е. Exception
, чтобы поддерживать чистоту ваших тестов.
Простой тест для наблюдения NoSuchElementException
и TimeoutException
в деталях:
Кодовый блок:
from selenium import webdriver
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, NoSuchElementException
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("start-maximized")
chrome_options.add_argument('disable-infobars')
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get("https://www.google.com/")
try:
driver.find_element_by_xpath("//input[@name='q123']").send_keys("user10391084")
except NoSuchElementException as nse:
print(nse)
print("-----")
print(str(nse))
print("-----")
print(nse.args)
print("=====")
try:
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//input[@name='q123']"))).send_keys("user10391084")
except TimeoutException as toe:
print(toe)
print("-----")
print(str(toe))
print("-----")
print(toe.args)
driver.quit()
Консольный вывод:
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name='q123']"}
(Session info: chrome=75.0.3770.100)
-----
Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name='q123']"}
(Session info: chrome=75.0.3770.100)
-----
('no such element: Unable to locate element: {"method":"xpath","selector":"//input[@name=\'q123\']"}\n (Session info: chrome=75.0.3770.100)', None, None)
=====
Message:
-----
Message:
-----
('', None, None)
Заключение
Вы можете видеть из Консольного вывода через сообщение Часть исключения правильно определена для NoSuchElementException
, но сообщение деталь не определена для TimeoutException
. Следовательно, он становится пустым.