java - 线程“主”org.openqa.selenium.WebDriverException 中的异常:geckodriver 升级后等待 45 秒等待 Firefox 启动超时
问题描述
我在java中编写了下面的代码来打开firefox并重定向到gmail.com链接,但似乎它在重定向之前已经超时。我检查了stackoverflow中的解决方案,发现其他人面临同样的问题。他/她已经升级了过时的 geckodriver,之后它成功地重定向到了他/她的链接。在看到我检查了 geckodriver、firefox 和 selenium 的版本之后,似乎一切都更新了。geckodriver的版本是v0.20.1,firefox版本是60.0.2,selenium是3.12.0。我写的代码是:
System.setProperty("webdriver.gecko.driver", "C:\\Users\\MI SERVICE\\Downloads\\geckodriver.exe");
FirefoxOptions capa = new FirefoxOptions();
capa.setCapability("marionette", false);
WebDriver driver = new FirefoxDriver(capa);
driver.navigate().to("https://www.gmail.com");
driver.quit();
异常导致:
Exception in thread "main" org.openqa.selenium.WebDriverException: Timed out waiting 45 seconds for Firefox to start.
Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T15:15:03.216Z'
System info: host: 'DESKTOP-3P379LK', ip: '192.168.0.105', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '10.0.1'
Driver info: driver.version: FirefoxDriver
at org.openqa.selenium.firefox.XpiDriverService.waitUntilAvailable(XpiDriverService.java:132)
at org.openqa.selenium.firefox.XpiDriverService.start(XpiDriverService.java:117)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:79)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:207)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:130)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:125)
at firefoxScripts.MyFirstTestCase.main(MyFirstTestCase.java:17)
Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [http://localhost:36845/hub/status] to be available after 45002 ms
at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:100)
at org.openqa.selenium.firefox.XpiDriverService.waitUntilAvailable(XpiDriverService.java:130)
... 7 more
Caused by: java.util.concurrent.TimeoutException
at java.base/java.util.concurrent.FutureTask.get(Unknown Source)
at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:148)
at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:75)
... 8 more
解决方案
当您使用Selenium v3.12.0 时,GeckoDriver 是 v0.20.1和Firefox v60.0.2,您必须强制使用marionette,这是默认配置。由于您已强制设置marionette
为false,因此您将错误视为:
org.openqa.selenium.WebDriverException: Timed out waiting 45 seconds for Firefox to start.
解决方案:
有两种方法可以解决您的问题,如下所示:
使用默认配置(marionette设置为true),如下所示:
System.setProperty("webdriver.gecko.driver", "C:\Users\MI SERVICE\Downloads\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.navigate().to("https://www.gmail.com"); driver.quit();
或者,您可以将marionette显式设置为true,如下所示:
System.setProperty("webdriver.gecko.driver", "C:\Users\MI SERVICE\Downloads\geckodriver.exe"); FirefoxOptions capa = new FirefoxOptions(); capa.setCapability("marionette", true); WebDriver driver = new FirefoxDriver(capa); driver.navigate().to("https://www.gmail.com"); driver.quit();
推荐阅读
- react-native - 如何在 react-native 中应用 tabBarColor?
- typescript - 打字稿中的可索引类型是什么?
- python - 如何在给定段长度和段中的偏移量的情况下从熊猫开始创建偏移量?
- ms-access - 根据组合框选择切换表单上其他字段的可见性 - MS Access
- javascript - 如何在javascript中通过其键删除多维数组?
- java - 如何通过仅使用一个 if 语句输入 1 到 7 之间的数字来找到今天是哪一天?
- google-cloud-platform - 是否可以为 GKE 部署分配保留的公共 IP 以用于出口流量?
- python - 通过 udp 接收消息,延迟 python
- tensorflow - TensorFlow JS (React Native) 空响应
- c# - Azure B2C:调用 Asp.Net Web.API 的 Asp.Net Web API