Как проверить, если find_element_by_ не удалось в Selenium Python?
У меня есть сомнения, когда я использую find_element_by_name, find_element_by_id и подобные. Например, в этом коде:
self.elem = self.driver.find_element_by_name("username").send_keys("admin")
self.elem = self.driver.find_element_by_name("password").send_keys("admintest")
Как я должен проверить, произошла ли какая-либо ошибка? Я знаю, что я могу сделать это:
try:
self.elem = self.driver.find_element_by_name("username").send_keys("admin")
except:
print("OK, some problem happened to find username...")
sys.exit(1)
try:
self.elem = self.driver.find_element_by_name("password").send_keys("admintest")
except:
print("OK, some problem happened to find password...")
sys.exit(1)
Но если я сделаю это, у меня будет много исходного кода. Так есть ли у кого-нибудь другое решение для проверки возврата?
Заранее спасибо.
1 ответ
Обычно в тестовом коде вы не должны обрабатывать какие-либо исключения, которые выдает сценарий, потому что ваш сценарий должен завершиться сбоем при возникновении исключения, которое именно то, что вы обычно должны хотеть от своего сценария.
Например, если вы напишите что-то вроде -
self.elem = self.driver.find_element_by_name("some_name")
Теперь, если тестируемая HTML-страница не содержит такого элемента, ваш сценарий не должен указывать на такой случай, отображающий любое исключение, которое было сгенерировано.
Возможно, вы захотите обработать любые исключения в вашем тестовом сценарии только в определенных сценариях, таких как -
1) Вы хотите найти тот же элемент с другим локатором (хотя это не очень хорошая практика).
2) Вам нужно подождать некоторое время и снова попытаться найти тот же элемент (опять же, это не очень хорошая практика, вместо этого следует использовать ожидание).
3) Вы не хотите, чтобы ваш сценарий немедленно завершался сбоем, когда не найдено ни одного элемента. Возможно, вы захотите, чтобы ваш индивидуальный сценарий хотя бы продолжал находить другие элементы и выполнять другие утверждения, чтобы у вас было общее представление о текущем статусе вашего веб-приложения.
4) Вы хотите отобразить возбужденное исключение в удобной для пользователя форме (так же, как вы это сделали) вместе с трассировкой стека.
5) Требуется подсчет отказов для ваших тестов, выполняемых в комплекте (обычно это не требуется, потому что ваш бегун должен предоставить вам сводку сборки).
Таким образом, в целом, нет действительно веской причины для обработки любых исключений в вашем сценарии, потому что ваши тестовые сценарии в идеале должны выполняться без каких-либо из них. Обработка их заставит вашего бегуна не распознавать его как неудачный тест, и он не будет служить цели написания скриптов.