t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как отследить ошибку 500 selenium + python

Теги: #<Tag:0x00007f74800129c0> #<Tag:0x00007f74800128f8>

Привет,
У меня есть форма, после её заполнения я отпровляю, проблема в том что когда я её отпровляю в console я вижу ошибку 500 но форма осталась заполнена и не посылается. Как я могу отловить 500 ошибку?

Родными средствами никак.
Говорят (не пробовал) эту задачу решить поможет browsermob proxy.
Альтернатива - нажали кнопку, не сработало, отправили request , проверили статус.

а как после click() я отпровляю request через httplib?

Кликнули, не увидели результата, то есть тест уже зафейлился. Но чтобы для диагностики ошибок точно понять причину падения, можно отдельно питоновскими средствами отправить запрос к серверу. Как вариант. Может кто лучше идею предложит.
Имею ввиду, в том же тесте, но без вебдрайвера. Простой httpзапрос (тем же httplib)- адрес то вам известен?

Пытался с httplib, проблема в том что страница только перезагружается и посылает 200 а в console log 500.

Можно скрин того, о чём вы говорите? Адреса замажьте.

Так это у вас какой-то скрипт пишет в консоль.
А есть ли 500 ошибка во вкладке network?

Есть, а что я там должен видить?

1 Симпатия

Там наверняка увидите xhr запросы с кодом ответа 500. Вам надо с помощью того же httplib отправить подобный post запрос к серверу. В случае, если придет 500 - вывести в л ог. ТЕст все равно зафейлится, вы же просто хотите в логах автотестов видеть причину падения, верно?

1 Симпатия

Да, я просто поставлю проверку у себя в скрипте, если 500 break и досведания. Спасибо за помощь!

для c#:

        var logs = WebDriver.Manage().Logs.GetLog(LogType.Browser);

        StringBuilder consoleLogs = new StringBuilder();
        consoleLogs.AppendLine();
        consoleLogs.AppendLine($"---------------------------------------------------- Browser {SelectedBrowser} logs ----------------------------------------------------");
        foreach (var l in logs)
        {
            consoleLogs.AppendLine(l.ToString());
        }

так я записываю браузерные логи в общий лог файл после окончания теста, так как даже если все прошло правильно, это не означает, что в консоли не было ошибок).
Можете проанализировать лог как строку, либо LogEntry содержит проперти “Level”

3 Симпатий

Через BrowserMob отловить можно. А логи, вроде бы, не из всех браузеров одинаково получаются.

Просто, прежде чем усложнять, можно вообще рассмотреть другой способ. Есть несколько уровней тестирования. Анализ ответов с сервера - это уровень бэкенд-тестирования. Можно для этого написать бэкенд-тесты. Если тестим пользовательский интерфейс, нам все равно, что там в логе и в ответах сервера.

Может быть, там просто реализация такая: например, делается несколько попыток отправки, и ошибка 500 в одной из попыток - это нормально? (Понятно, что это ненормально, но у нас ведь не на это требования). Увидели ошибку - хорошо, можно в описание бага вставить. А фейлить тест надо по другим признакам, видным пользователю: или страница не поменялась после отправки, или введенные данные нигде не отображаются, смотря что там должно происходить.

3 Симпатий

Весь юмор в том, что автор топика не спрашивает, как ему лучше протестировать этот кейс.
Он спросил - как отловить конкретно ошибку 500. Ему ответили.
Естественно, что если бы он спросил по-другому, мы бы и отвечали по-другому, примерно как вы.