Экземпляр драйвера 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 ничего не знает о вашей сетке, он только создает код.

Подумайте о том, чтобы иметь отдельную работу, которая будет выполняться на основе результатов выполнения предыдущей, в ней вы можете очистить свою среду, убив зависшие процессы и, возможно, перезапустив саму сетку.

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