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

Фотография

Process refused to die after 10 seconds, and couldn't taskkill it


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

#1 lapa

lapa

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

  • Members
  • Pip
  • 55 сообщений


Отправлено 12 февраля 2016 - 11:38

Версии все последние, в системных переменных system32 выставлен. может кто подскажет как избавиться от:

 

Feb 12, 2016 2:32:11 PM org.openqa.selenium.os.ProcessUtils killWinProcess
WARNING: Process refused to die after 10 seconds, and couldn't taskkill it
org.openqa.selenium.os.ProcessUtils$ProcessStillAliveException: Timeout waiting for process to die
    at org.openqa.selenium.os.ProcessUtils.waitForProcessDeath(ProcessUtils.java:67)
    at org.openqa.selenium.os.ProcessUtils.killWinProcess(ProcessUtils.java:139)
    at org.openqa.selenium.os.ProcessUtils.killProcess(ProcessUtils.java:81)
    at org.openqa.selenium.os.UnixProcess$SeleniumWatchDog.destroyHarder(UnixProcess.java:247)
    at org.openqa.selenium.os.UnixProcess$SeleniumWatchDog.access$200(UnixProcess.java:201)
    at org.openqa.selenium.os.UnixProcess.destroy(UnixProcess.java:125)
    at org.openqa.selenium.os.CommandLine.destroy(CommandLine.java:155)
    at org.openqa.selenium.firefox.FirefoxBinary.quit(FirefoxBinary.java:246)
    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.quit(NewProfileExtensionConnection.java:194)
    at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.quit(FirefoxDriver.java:364)
    at org.openqa.selenium.firefox.FirefoxDriver.stopClient(FirefoxDriver.java:310)
    at org.openqa.selenium.remote.RemoteWebDriver.quit(RemoteWebDriver.java:529)
    at testCases.BasicTestCase.tearDown(BasicTestCase.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:211)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:703)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.InterruptedException
    at java.lang.ProcessImpl.waitFor(ProcessImpl.java:451)
    at org.openqa.selenium.os.ProcessUtils$ProcessWaiter.run(ProcessUtils.java:164)
    ... 1 more


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 12 февраля 2016 - 11:52

Всё-таки, укажите версии FF и селениума, явы и ОС.


  • 0

#3 lapa

lapa

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

  • Members
  • Pip
  • 55 сообщений


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

Всё-таки, укажите версии FF и селениума, явы и ОС.

ff 44.0.2, selenium 2.52.0, win 10


  • 0

#4 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 12 февраля 2016 - 12:45

Используйте при закрытии webDriver.Close();


  • 0

#5 lapa

lapa

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

  • Members
  • Pip
  • 55 сообщений


Отправлено 12 февраля 2016 - 13:15

Используйте при закрытии webDriver.Close();

пробовал. тогда не закрываются дополнительно открытые окна


  • 0

#6 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 14 февраля 2016 - 10:45

А процесс firefox.exe так и продолжает висеть после этой ошибки?

Или просто он умирает слишком долго и надо в Selenium увеличить таймаут, время ожидания остановки процесса?


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#7 lapa

lapa

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

  • Members
  • Pip
  • 55 сообщений


Отправлено 15 февраля 2016 - 10:35

А процесс firefox.exe так и продолжает висеть после этой ошибки?

Или просто он умирает слишком долго и надо в Selenium увеличить таймаут, время ожидания остановки процесса?

процесс закрывается. где увеличить таймаут? я так понимаю это не стандартный driver.manage().timeouts(). ?


  • 0

#8 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 15 февраля 2016 - 19:52

Я заглянул в код -- там фиксированный таймаут 10 секунд, нет возможности его настроить.

 

Если браузер закрывается -- можно вообще смело игнорировать эти сообщения.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#9 lapa

lapa

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

  • Members
  • Pip
  • 55 сообщений


Отправлено 16 февраля 2016 - 15:51

Я заглянул в код -- там фиксированный таймаут 10 секунд, нет возможности его настроить.

 

Если браузер закрывается -- можно вообще смело игнорировать эти сообщения.

спасибо


  • 0

#10 DennisM

DennisM

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

  • Members
  • Pip
  • 55 сообщений
  • ФИО:Dennis M
  • Город:Ralegh NC, USA

Отправлено 16 февраля 2016 - 16:00

Если ничего не помогает, убиваем жестко. :)

 

Извлечь комманду:

taskkill /f /im firefox.exe 

или

taskkill /f /im chrome.exe 

или

taskkill /f /im iexplorer.exe 

 

Метод для этого:

 

public String execCmdCommand(String command){
 
StringBuffer output = new StringBuffer();
 
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = 
new BufferedReader(new InputStreamReader(p.getInputStream()));
 
String line = "";
 
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
 
} catch (Exception e) {
e.printStackTrace();
}
 
return output.toString();
}

  • 0

#11 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 17 февраля 2016 - 07:16

Там и так taskkill выполняется, после этого Selenium 10 секунд ждёт завершения процесса. Судя по всему, этого времени просто не хватает, но в конце концов процесс всё таки останавливается. Так что необходимости повторно делать ему taskkill я не вижу.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#12 DennisM

DennisM

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

  • Members
  • Pip
  • 55 сообщений
  • ФИО:Dennis M
  • Город:Ralegh NC, USA

Отправлено 17 февраля 2016 - 14:13

Там и так taskkill выполняется, после этого Selenium 10 секунд ждёт завершения процесса. Судя по всему, этого времени просто не хватает, но в конце концов процесс всё таки останавливается. Так что необходимости повторно делать ему taskkill я не вижу.

Я не знаю что делает селениум при driver.close() . Похоже просто пытается закрыть корректно. Но taskkill убивает браузер всегда. Не закрывает аппликашку а убивает именно процесс.


  • 0

#13 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 18 февраля 2016 - 07:53

При driver.close() просто закрывается текущее окно и всё, а там уже сам браузер пусть решает, что ему делать.

 

Зато при driver.quit() закрываются все окна браузера и останавливается процесс браузера. В операционной системе Windows для этого используется как раз taskkill. Именно поэтому второй раз убивать его нет смысла. Дважды не казнят :)


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#14 DennisM

DennisM

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

  • Members
  • Pip
  • 55 сообщений
  • ФИО:Dennis M
  • Город:Ralegh NC, USA

Отправлено 18 февраля 2016 - 14:33

При driver.close() просто закрывается текущее окно и всё, а там уже сам браузер пусть решает, что ему делать.

 

Зато при driver.quit() закрываются все окна браузера и останавливается процесс браузера. В операционной системе Windows для этого используется как раз taskkill. Именно поэтому второй раз убивать его нет смысла. Дважды не казнят :)

webDriver.Close() – Close() method closes the browser window that the driver has focus of.
webDriver.Quit() – Calls dispose; in other terms quit() method calls dispose method which will turn all the browser windows closed and ends webdriver session.
webDriver.Dispose() – Dispose() method closes all browser windows and safely ends the session.

 

taskkill - убивает всё не safely. :) 

 

Это разница как закрыть окно по крестику "Х" или убить процесс из диспетчера задач.
Использую taskkill всегда в конце тестов. Особенно после тяжелого datadriven с тяжелыми страницами. 
Если браузер зависает с сообщением "процесс не отвечает" то как бы вебдрайвер не дергался, окно он не закрывает. 
Taskkill - всё равно kill! ;)

  • 0

#15 lapa

lapa

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

  • Members
  • Pip
  • 55 сообщений


Отправлено 19 февраля 2016 - 16:04

 

Если ничего не помогает, убиваем жестко. :)

 

Извлечь комманду:

taskkill /f /im firefox.exe 

или

taskkill /f /im chrome.exe 

или

taskkill /f /im iexplorer.exe 

 

Метод для этого:

 

public String execCmdCommand(String command){
 
StringBuffer output = new StringBuffer();
 
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = 
new BufferedReader(new InputStreamReader(p.getInputStream()));
 
String line = "";
 
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
 
} catch (Exception e) {
e.printStackTrace();
}
 
return output.toString();
}

 

это всё понятно, но как выбрать именно нужный экземпляр? тесты то раннятся в параллель и висит несколько инстансов


  • 0

#16 DennisM

DennisM

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

  • Members
  • Pip
  • 55 сообщений
  • ФИО:Dennis M
  • Город:Ralegh NC, USA

Отправлено 19 февраля 2016 - 16:18

 

 

Если ничего не помогает, убиваем жестко. :)

 

Извлечь комманду:

taskkill /f /im firefox.exe 

или

taskkill /f /im chrome.exe 

или

taskkill /f /im iexplorer.exe 

 

Метод для этого:

 

public String execCmdCommand(String command){
 
StringBuffer output = new StringBuffer();
 
Process p;
try {
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = 
new BufferedReader(new InputStreamReader(p.getInputStream()));
 
String line = "";
 
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
 
} catch (Exception e) {
e.printStackTrace();
}
 
return output.toString();
}

 

это всё понятно, но как выбрать именно нужный экземпляр? тесты то раннятся в параллель и висит несколько инстансов

 

 

Для этого надо указывать PID  (Process ID)

taskkill /pid 1230  

https://technet.micr...y/bb491009.aspx

 

Вот как достать PID из текущего WebDriver теста в JAVA нужно поискать... Например:

http://stackoverflow...hed-by-selenium

 

Или просто после всех тестов убивай все оставшиеся браузеры.


  • 0


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

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