Недавно вышел новый релиз библиотеки Selenium 2.26. В этом релизе для Firefox была реализована возможность получения логов браузера через интерфейс WebDriver. Именно об этой функциональности пойдет речь в данной статье.
В Mozilla Firefox есть консоль ошибок, куда выводятся все ошибки на странице, связанные с JavaScript, CSS и не только. Открывается она с помощью меню «Веб-разработка->Консоль ошибок» или комбинацией клавишь Ctrl+Shift+J. Отслеживание ошибок JavaScript во время выполнения теста бывает достаточно важным, даже если они не привели к падению теста. Такие ошибки могут носить разный характер, приводить к появлению или исчезновению элементов, или полностью ломать логику работы страницы.
Получить доступ к такому логу через вебдрайвер можно следующим образом:
for (LogEntry logEntry : driver.manage().logs().get("browser").getAll()) { System.out.println(logEntry); }
Но полный объем полученных данных может быть очень большим и, в основном, состоять из предупреждений, касающихся CSS. Для того, чтобы отсеять ненужную информацию можно отфильтровать лог по степени важности. Ошибки Javascript относятся к сообщениям серьезного сбоя и получить их можно с уровнем Level.SEVERE
:
for (LogEntry logEntry : driver.manage().logs().get("browser") .filter(Level.SEVERE)) { System.out.println(logEntry); }
Пример ошибки в консоле Firefox:
Вывод лога последнего примера в консоль:
[2012-11-27T18:12:40+0200] [SEVERE] TypeError: e(document).on is not a function
Полученные данные из лога браузера можно сохранять отдельным файлом и просматривать после выполнения теста.
К сожалению, в выводе ошибки отсутствует какая-либо информация про то, где она была обнаружена. Поэтому сбор таких ошибок сам по себе не принесет никакой пользы. Чтобы сузить круг поиска ошибок в скриптах, можно, как минимум, определить url страницы, на которой эта ошибка произошла. Но для этого нужно довольно часто просматривать лог браузера (после загрузки страницы, нажатий на элементы и пр.) и определять в нем наличие новых записей. Для решения этой задачи может подойти использование WebDriverEventListener.
И, напоследок, снова хочу напомнить, что пока возможность получения логов браузера реализована только для Mozilla Firefox.
Спасибо Большое, Очень полезная статья =)
Татьяна ловлю ошибку, прописал в классе for (LogEntry logEntry : driver.manage().logs().get(«browser»)
.filter(Level.SEVERE)) {
System.out.println(logEntry);
}
Тест останавливается, а ошибка в консоль не выводится((( через Консоль ошибок открываю и вижу ошибку. подскажите пожалуйста что надо сделать?
ошибка такого рода :
Метка времени: 05.12.2012 17:51:46
Ошибка: TelemetryStopwatch: key «FX_SESSION_RESTORE_COLLECT_DATA_MS» was already initialized
Источник: resource://gre/modules/TelemetryStopwatch.jsm
Строка: 53
Тест «останавливается», в смысле с ошибкой? Скорее всего не вовремя получаете лог, либо слишком поздно — если ошибка была критичная для драйвера, либо рано — ошибки может еще не быть в консоле. Попробуйте убрать на время проверку в самом тесте, на которой он падает, и посмотреть выведется ли ошибка браузера в консоль.
Татьяна решил проблему след образом.
в файл C:\Program Files (x86)\Mozilla Firefox\defaults\pref\channel-prefs.js
добавил :
pref(«toolkit.telemetry.prompted», 2);
pref(«toolkit.telemetry.rejected», true);
pref(«toolkit.telemetry.enabled», false);
Тесты стали выполняться быстрее. и скрипт этот не блокирует выполнение моих тестов)
Здравствуйте, Татьяна!
Спасибо большое Вам за ваш труд.
Продолжайте в том же духе.
Вопрос по логированию.
Где нужно вызывать метод вывода логов в jUnit, после теста или после каждого действия драйвера?
Спасибо.