Экземпляр драйвера Selenium сохраняется, если тест на Jenkins прерывается
Итак, мне интересно, как я могу заставить мои сеансы драйвера / браузера правильно завершиться, если тест прерван с помощью jenkins. Локально, если я выполню свои тесты и прерву их, браузер будет корректно завершен. Однако через Дженкинса этого не происходит. Если я прекращаю работу на этапе тестирования, когда мои тесты выполняются на сетке селена, браузер остается открытым, в результате чего узел по-прежнему отображается как используемый, так как он не обнаружил, что прерванное задание должно было прервать сеанс браузера.,
Я возился с крючками с огурцом, но чем больше я об этом думаю, тем не менее, я не уверен, смогу ли я справиться с этим с помощью крючка, поскольку при локальном запуске такого поведения не происходит. Теперь я думаю, что это должен быть параметр на сетке селена или Дженкинс.
Моим самым оптимальным решением было бы использовать хук, подобный приведенному ниже, который мог бы определить, был ли он запущен удаленно, и завершить сеанс, если он был прерван / пройден / не выполнен. Но если есть какое-то решение через Дженкинса или настройки селеновой сетки, это тоже было бы здорово! Спасибо!
this.registerHandler('After', function (event, done) {
// Some code to clear browser session
done();
});
2 ответа
Я не думаю, что вам нужно делать что-то дополнительно здесь, в вашем клиентском коде.
Селеновая сетка, в частности, имеет три параметра, которые предназначены для такого рода очистки.
-browserTimeout
в секундах: количество секунд, в течение которых сеанс браузера может зависать во время выполнения команды WebDriver (пример: driver.get(url)). Если время ожидания истекло во время обработки команды WebDriver, сеанс завершится. Минимальное значение равно 60. Неуказанное, нулевое или отрицательное значение означает ожидание в течение неопределенного времени.Default: 0
-cleanUpCycle
в миллисекундах: указывает, как часто концентратор будет опрашивать запущенные прокси для истекших (то есть зависших) потоков. Необходимо также указатьtimeout
вариант.Default: 5000
(5 секунд)-timeout
,-sessionTimeout
в секундах: указывает время ожидания, по истечении которого сервер автоматически завершает сеанс, который не выполнялся в течение последних X секунд. Тестовый слот будет выпущен для другого теста. Это обычно используется, чтобы заботиться о сбоях клиента. Для ролей узлов / узлов сетки также должен быть установлен cleanUpCycle.Default: 1800
Используя комбинацию всех трех вышеуказанных параметров, вы можете настроить свой узел на автоматическое закрытие потерянных экземпляров браузера и сеансов.
Эта документация доступна в самом Selen Uber JAR как документация командной строки. Вы можете обратиться к этому SO-ответу, чтобы узнать, как его получить, и посмотреть, какие другие варианты доступны.
Есть некоторая дополнительная документация, связанная с timeouts
на вики-странице Grid'2 здесь.
Надеюсь, это поможет!
По сути, это то же самое, что желание что-то делать после локального выполнения прерывания, jenkins ничего не знает о вашей сетке, он только создает код.
Подумайте о том, чтобы иметь отдельную работу, которая будет выполняться на основе результатов выполнения предыдущей, в ней вы можете очистить свою среду, убив зависшие процессы и, возможно, перезапустив саму сетку.