线程“main”中的异常org.openqa.selenium.WebDriverException:在geckodriver升级后Firefox等待45秒

时间:2018-06-12 07:26:43

标签: java selenium firefox selenium-webdriver geckodriver

我在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

2 个答案:

答案 0 :(得分:2)

当您使用 Selenium v​​3.12.0 时, GeckoDriver是v0.20.1 Firefox v60.0.2 您必须强制使用< strong> 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();
    

答案 1 :(得分:0)

我有此错误2天,对我来说,解决方案是在Set.Plataform中放置Platafor.ANY或Plataform.Windows,因为Plataform.WIN10不起作用,不需要木偶,并且我添加并且始终起作用,这仅适用。我希望这可以帮助其他人:

public class Main {
    public static RemoteWebDriver driver;

    public static void main(String[] args) throws MalformedURLException {
        System.setProperty("webdriver.gecko.driver", "D:/Lib/geckodriver.exe");
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities().firefox();
        desiredCapabilities.setPlatform(Platform.ANY);
        desiredCapabilities.setBrowserName("firefox");

        driver = new RemoteWebDriver(new URL("http://172.20.19.182:5557/wd/hub"), desiredCapabilities);
        driver.navigate().to("http://www.google.com");
        driver.findElementByName("q").sendKeys("execute automation");
        driver.findElementByName("q").sendKeys(Keys.ENTER);
        driver.close();
        // write your code here
    }
}