Проблема похожая на 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 ов?
Как убить IEDriverServer на хабе
Автор zxw, 22 фев 2013 12:07
Сообщений в теме: 2
#1
Отправлено 22 февраля 2013 - 12:07
#2
Отправлено 22 февраля 2013 - 18:24
в заголовке ошибка - убить надо на ноде
Никто не сталкивался с такой проблемой?
Никто не сталкивался с такой проблемой?
#3
Отправлено 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).
Как и указано в 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 анонимных