Перейти к содержимому

Фотография

Как убить IEDriverServer на хабе


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 zxw

zxw

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Гавриш Виталий Владимирович

Отправлено 22 февраля 2013 - 12:07

Проблема похожая на http://code.google.c.../detail?id=4288

Есть грид с нодом под линуксом и хабом под вин7. Запускаю тест под ИЕ на ноде.
Тест состоит из 20 тестов в каждом из которых создается новый driver (driver = new EventFiringWebDriver(new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability));
_

а в конце теста убивается driver.quit();

Но если тест где-то зависает, он закрывается по timeout и после этого в процессах остается старый IEDriverServer.exe и запущеный им интернет икслорер.
такой сценарий повторяется и IEDriverServer.exe множатся. Обычно если их больше двух то тесты уже не выполняются.

Пытался в начале теста чистить процессы.

public static void clearIE(){
try {
Runtime.getRuntime().exec("cmd /K taskkill /F /IM IEDriverServer.exe");

} catch (IOException e1) {
// TODO Auto-generated catch block

}
try {
Runtime.getRuntime().exec("cmd /K taskkill /F /IM iexplore.exe");
} catch (IOException e) {
// TODO Auto-generated catch block

}
}
Но походу из-за того что тут приложение запущено под линксом а выполняется под виндовсом это не работает.

Как еще можно убить процес из вебдрайвера(java) на удаленном ноде?
или как избежать размножения IEDriver ов?
  • 0

#2 zxw

zxw

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Гавриш Виталий Владимирович

Отправлено 22 февраля 2013 - 18:24

в заголовке ошибка - убить надо на ноде

Никто не сталкивался с такой проблемой?
  • 0

#3 sawoy

sawoy

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Alex Savchuk

Отправлено 18 марта 2013 - 00:29

Привет.

Как и указано в http://code.google.c.../detail?id=4288
простейшее и работающее решение - это обертка всего кода теста в
try { ... } catch { ... } finally { driver.quit() }

Если же тестовый фреймворк реализует метод типа tearDown()/onError/onFailure/...,
то проще вынести вызов driver.quit() в него.

В особых сверх редких ситуациях может потребоваться форсированный kill
драйвера и браузера. Тогда придется реализовать:
* получение адреса ноды по текущей сессии
* логин на ноду по ее адресу
* kill драйвера и браузера.
Все это нужно сделать кросплатформенно (если ноды разные), безопасно для других сессий на ноде и т.п.,
что сложно.

В большинстве же ситуаций проще вообще ничего не делать, кроме увеличения максимального количества
одновременных сессий (maxSession) и изменения таймаута,
после которого неактивная сессия убивается хабом (browserTimeout).
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных