Как закрыть браузер на сервере Селен RC, который потерял клиента - PullRequest
8 голосов
/ 23 августа 2009

предположим, что клиент запускает сеанс селена на сервере RC, но в середине сеанса клиент "ушел". Браузер останется открытым, и, в конце концов, после достаточного количества пропущенных сеансов будет достаточно «потерянных» браузеров, чтобы замедлить работу компьютера.

Как я могу убедиться, что эти браузеры закрыты? Почему в протоколе нет элемента "keep-alive", который бы гарантировал, что клиент по-прежнему реагирует, а если нет, завершить сеанс?

Ответы [ 3 ]

14 голосов
/ 24 августа 2009

Любой экземпляр браузера имеет идентификатор сеанса, который вы можете сохранить. Пример Python:

>>> import selenium
>>> browser = selenium.selenium("localhost",4444, "*firefox", "http://www.santiycr.com.ar")
>>> browser.start()
>>> browser.sessionId
u'b4ad1f1d624e44d9af4200b26d7375cc'

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

Теперь, используя cron или любое другое обычное выполнение, вы можете прочитать этот файл, перебрать сессионные ID, хранящиеся в нем, и открыть следующий URL (используя браузер или даже библиотеку http для вашего языка программирования):

http://localhost:4444/selenium-server/driver/?sessionId=THE-SESSION-ID&cmd=testComplete

Это должно сработать.

Edit: я нашел этот вопрос настолько интересным, что создал пост в моем блоге о решении. Если вы парень с питоном, вам будет интересно: http://www.santiycr.com.ar/djangosite/blog/posts/2009/aug/25/close-remaining-browsers-from-selenium-rc

2 голосов
/ 23 октября 2010
>>> browser.stop()

Действует так же, как Санти объясняет выше.

2 голосов
/ 03 сентября 2010

Вы также можете просто убить процесс:

Windows:

taskkill /f /im iexplore.exe
taskkill /f /im firefox.exe

* Никс:

for i in `ps -A | grep firefox | awk '{print $1}'`; do kill -9 $i; done
...