Как проверить, не удалось ли 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)

Но если я это сделаю, у меня будет много исходного кода. Так есть ли у кого-нибудь другое решение для проверки возврата?

Заранее спасибо.

Вам не нужно ничего делать, если произойдет ошибка, вы получите уведомление и программа будет остановлена

Andrei Suvorkov 10.08.2018 15:19

Хорошо, я понимаю тебя. Но я хотел бы знать, используют ли те, кто программирует с Selenium, определенный способ обработки ошибок. Я начинаю с Selenium WebDriver, и у меня пока нет сомнений в хорошей практике программирования с использованием Selenium. Спасибо за ваш ответ.

k_pedron 10.08.2018 15:40

Хорошая практика программирования - это код, подобный приведенному выше, без try/exept.

Andrei Suvorkov 10.08.2018 15:43

Итак, я буду использовать без попытки / кроме. Я провел здесь несколько тестов, и вывод журнала с использованием htmlTestRunner хороший (причина исключения также печатается).

k_pedron 10.08.2018 15:54
1
4
647
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обычно в тестовом коде вы не должны обрабатывать какие-либо исключения, которые генерирует скрипт, потому что ваш скрипт имел ввиду будет терпеть неудачу при возникновении исключения, а это именно то, что вы обычно должны хотеть от вашего скрипта.

Например, если вы напишете что-то вроде -

self.elem = self.driver.find_element_by_name("some_name")

Теперь, если ваша тестируемая HTML-страница не содержит таких элементов, ваш скрипт должен не сможет указать такое событие, отображая какое-либо исключение, которое было сгенерировано.

Вы можете обрабатывать любые исключения в своем тестовом сценарии только в определенных сценариях, например:

1) Вы хотите найти тот же элемент с другим локатором (хотя это не очень хорошая практика).

2) Вам нужно подождать некоторое время и снова попытаться найти тот же элемент (снова не рекомендуется, вместо этого следует использовать ждет).

3) Вы не хотите, чтобы ваш скрипт немедленно завершился ошибкой, когда не обнаружен ни один элемент. Возможно, вы хотите, чтобы ваш отдельный сценарий по меньшей мере продолжал находить другие элементы и выполнять другие утверждения, чтобы вы имели общее представление о текущем состоянии вашего веб-приложения.

4) Вы хотите отображать возникшее исключение удобным для пользователя способом (как и вы) вместе с трассировкой стека.

5) Вам нужен счетчик сбоев для ваших тестов, запущенных в комплекте (обычно не требуется, потому что ваш бегун должен предоставить вам сводку сборки).

Итак, в целом нет действительно веских причин для обработки каких-либо исключений в вашем скрипте, потому что ваши тестовые скрипты должен идеально работают без каких-либо из них. Обработка их заставит ваш бегун не распознавать это как неудавшийся тест, и это не будет служить цели написания скриптов.

Например: попробуйте: alert = WebDriverWait (self.driver, 5) .until (EC.visibility_of_element_located ((By.CSS_SELECTOR, ".alert.alert-warning> strong))) except: raise ValueError (" Ошибка: не удается найти Alert-warning ») У меня есть предупреждения-предупреждения и бдительный успех, в этой ситуации происходит обновление прошивки, затем мне нужно немного подождать, чтобы продолжить, так есть ли другой способ проверить это (без WebDriverWait)? Поскольку ожидание не останавливает тесты, если предупреждение не отображается, и для остановки необходимо try / except.

k_pedron 10.08.2018 16:37

Waits остановит выполнение, вызвав исключение тайм-аута. Просто не обрабатывайте это, кроме, и ваше исполнение будет остановлено.

Shivam Mishra 10.08.2018 16:42

Помните, что если вы используете try except, вы говорите программе НЕ останавливаться. Поэтому, если вы хотите, чтобы ваш скрипт остановился, просто не используйте try except.

Shivam Mishra 10.08.2018 16:47

Другие вопросы по теме