web-dev-qa-db-ja.com

Selenium WebDriver RuntimeException:プロセスは10秒後に終了することを拒否し、タスクキルできませんでした:実行可能ファイルが見つかりません:taskkill

  public class Second {
  private WebDriver driver;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @BeforeClass
  public void beforeClass() {
  driver = new FirefoxDriver();
  driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  driver.manage().window().maximize();
  }


 @Test
  public void testSecond() throws Exception {
  driver.get("url");
  System.out.println("test two");
  Thread.sleep(5000);

 }

 @AfterClass
 public void afterClass() throws Exception{
  driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
 }
}

これは、driver.quit()でランタイム例外をスローするtestNGテストケースです。テストは正常に合格しましたが、テストの完了後にブラウザが閉じられません
スタックトレース:

 FAILED CONFIGURATION: @AfterTest afterClass
Java.lang.RuntimeException: Process refused to die after 10 seconds, and couldn't taskkill it: Unable to find executable for: taskkill
at org.openqa.Selenium.os.ProcessUtils.killWinProcess(ProcessUtils.Java:142)
at org.openqa.Selenium.os.ProcessUtils.killProcess(ProcessUtils.Java:81)
at org.openqa.Selenium.os.UnixProcess$SeleniumWatchDog.destroyHarder(UnixProcess.Java:248)
at org.openqa.Selenium.os.UnixProcess$SeleniumWatchDog.access$2(UnixProcess.Java:245)
at org.openqa.Selenium.os.UnixProcess.destroy(UnixProcess.Java:124)
at org.openqa.Selenium.os.CommandLine.destroy(CommandLine.Java:153)
at org.openqa.Selenium.firefox.FirefoxBinary.quit(FirefoxBinary.Java:259)
at org.openqa.Selenium.firefox.internal.NewProfileExtensionConnection.quit(NewProfileExtensionConnection.Java:202)
at org.openqa.Selenium.firefox.FirefoxDriver$LazyCommandExecutor.quit(FirefoxDriver.Java:376)
at org.openqa.Selenium.firefox.FirefoxDriver.stopClient(FirefoxDriver.Java:322)
at org.openqa.Selenium.remote.RemoteWebDriver.quit(RemoteWebDriver.Java:477)
at testNGTestCase.Second.afterClass(Second.Java:54)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:601)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.Java:84)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.Java:564)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.Java:213)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.Java:138)
at org.testng.TestRunner.afterRun(TestRunner.Java:1014)
at org.testng.TestRunner.run(TestRunner.Java:621)
at org.testng.SuiteRunner.runTest(SuiteRunner.Java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.Java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.Java:291)
at org.testng.SuiteRunner.run(SuiteRunner.Java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.Java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.Java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.Java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.Java:1149)
at org.testng.TestNG.run(TestNG.Java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.Java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.Java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.Java:175)
Caused by: Java.lang.NullPointerException: Unable to find executable for: taskkill
at com.google.common.base.Preconditions.checkNotNull(Preconditions.Java:250)
at org.openqa.Selenium.os.UnixProcess.<init>(UnixProcess.Java:62)
at org.openqa.Selenium.os.CommandLine.<init>(CommandLine.Java:38)
at org.openqa.Selenium.os.WindowsUtils.killPID(WindowsUtils.Java:172)
at org.openqa.Selenium.os.ProcessUtils.killWinProcess(ProcessUtils.Java:138)

TcpTimedWaitDelayを30秒として指定しました。

7
Grishma Oswal

taskkillは標準のWindowsユーティリティです。 Seleniumがそれを見つけられないという事実は、環境変数PATHに標準のシステムユーティリティを含むディレクトリが含まれていないことを意味します。最新のWindowsバージョンの場合はC:\ Windows\system32です。

このディレクトリをPATH変数に追加し(この命令に従ってPATH変数を変更します: http://www.computerhope.com/issues/ch000549.htm )、コンソールを再起動するか、IDEこの環境変更を適用するためにSeleniumスクリプトを実行する場所。

12

driver.quit();が問題の原因です。 driver.close();を使用すると、この例外はスローされず、ブラウザは正しく閉じられます。

4
lordyoum

同じrunTimeExceptionがあり、IE 11でwebdriverを実行し、TestNGを使用しました。

回避策として、@ AfterSuiteでtry catchを使用し、バックグラウンドプロセスを強制終了しました。

public void closeBrowser()
{
    try 
    {
        driver.close();
        Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer.exe");

    }
    catch (Exception anException) 
    {
        anException.printStackTrace();
    }
}

これまでのところ期待どおりに動作します...

1
Del Patel

@Alexeiの回答に追加すると、パスC:\Windows\system32すでにWindows Pathに追加され、再起動 Eclipse with Admin privilegesWindows 10 OSで働いてくれました。

0