ChromeDriver在Java中使用Selenium的问题-等待驱动程序服务器启动的超时

时间:2019-08-05 12:06:00

标签: java selenium selenium-webdriver selenium-chromedriver

我已经在Selenium和ChromeDriver上苦苦挣扎了一段时间,但似乎无法正常工作。我的测试工作正常,直到上周才开始出现ChromeDriver无法启动的错误。当我运行脚本时,我只会得到错误的三分之一,而在我依次运行多个脚本时,我常常会收到错误。

我使用的版本:

  • Java 12.0.1
  • 硒:3.141.59
  • 谷歌浏览器:76.0.3809.87
  • ChromeDriver:76.0.3809.68
  • Windows 10

这是我得到的错误:

gcloud ml video detect-labels gs://cloud-ml-sandbox/video/chicago.mp4

以下代码段是发生错误的我的基类的一部分。创建新的ChromeDriver实例时,总是会发生此错误。每次创建新测试时,都会调用基本测试类:

org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:48'
System info: host: 'host', ip: '172.20.10.2', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '12.0.1'
Driver info: driver.version: ChromeDriver
    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:202)
    at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:188)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:79)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)
    at com.salesforce.BaseTest.setUp(BaseTest.java:40)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:458)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:523)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [http://localhost:10488/status] to be available after 20002 ms
    at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:100)
    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:197)
    ... 37 more
Caused by: java.util.concurrent.TimeoutException
    at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:204)
    at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:156)
    at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:75)
    ... 38 more

我已经尝试过的:

  • 重新安装Google Chrome(根据说明here),并确保使用推荐用于正确版本的Google Chrome的ChromeDriver。
  • 使用Selenium,Google Chrome和ChromeDriver的更新版本
  • 从命令提示符处启动我的测试使用的同一Chrome二进制文件。在http://localhost:9515/status上,我看到消息“ ChromeDriver准备好进行新的会话了”。因此可以很好地启动chromedriver.exe。
  • 尝试了--no-sandbox选项
  • 通过始终运行为true的标志调用AfterMethod,确保在每次会话后ChromeDriver退出。

如开头所述,我的脚本对某些脚本运行良好,但有时Chrome无法启动。并非总是相同的测试脚本会产生错误,并且会有所不同。任何人都有解决该问题的想法吗?

1 个答案:

答案 0 :(得分:1)

现在,当我更改所用软件的某些版本时,该问题已解决。以下步骤解决了该问题:

  • 使用JDK 1.8.0_221代替Java 12
  • 使用Google Chrome版本76.0.3809.87
  • ChromeDriver版本76.0.3809.68的使用
  • 更改为所有这些版本后,我重新启动了系统,并且我的测试终于再次起作用。