Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как убить IEDriverServer на ноде


(zxw) #1
Проблема похожая на 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
 

(Sergey Korol) #2

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


(Mykhailo Poliarush) #3

ну стандартного красивого способа нет, если quit не выполняет своей команды

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

например, 

 

Runtime rt = Runtime.getRuntime();
  if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) 
     rt.exec("taskkill " +....);
   else
     rt.exec("kill -9 " +....);

http://stackoverflow.com/questions/6356340/killing-a-process-using-java