有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Selenium WebDriver RuntimeException:进程在10秒后拒绝死亡,无法taskkill:找不到可执行文件: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);
    }
 }
}

这是一个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秒


共 (5) 个答案

  1. # 1 楼答案

    taskkill是标准的Windows实用程序。Selenium找不到它意味着环境变量PATH不包括包含标准系统实用程序的目录。对于现代Windows版本,它是C:\Windows\system32

    将此目录添加到路径变量(按照以下说明修改路径变量:http://www.computerhope.com/issues/ch000549.htm),然后重新启动控制台或IDE,在其中运行Selenium脚本以应用此环境更改

  2. # 2 楼答案

    此quit()问题仅适用于MS IE。我的IEDriver解决方案。exe和selenium remotewebdriver是:

    quit() //close tested window

    quit() //quit ie browser

  3. # 3 楼答案

    我有同样的runTimeException,在IE11上运行webdriver并使用TestNG

    作为一种解决方法,我在@AfterSuite中使用了一个try catch,并终止了后台进程:

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

    到目前为止一切正常

  4. # 4 楼答案

    driver.quit();导致问题。如果使用driver.close();,将不会引发此异常,并且浏览器将正确关闭

  5. # 5 楼答案

    添加到@Alexei答案中,由于路径C:\Windows\system32已经添加到Windows Path中,重新启动Admin privileges的eclipse对我在Windows 10 OS中起到了作用