我正在学习自动化测试,并在Selenium Webdriver中编写了脚本,但是下面出现了很多错误。
我按照教程进行安装,并按照所有步骤进行操作,但是没有任何效果。
错误不会告诉我太多信息,因此任何人都可以查看一下并告诉我在这种情况下应该怎么做?
谢谢。

public static void main(String[] args) {
    System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    String baseUrl = "http://www.facebook.com";
    String tagName = "";

    driver.get(baseUrl);
    tagName = driver.findElement(By.id("email")).getTagName();
    System.out.println(tagName);
    driver.close();
    System.exit(0);


Exception in thread "main" org.openqa.selenium.WebDriverException: Timed out waiting 45 seconds for Firefox to start.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:48'
System info: host: 'DESKTOP-5N6LIMJ', ip: '192.168.0.16', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_221'
Driver info: driver.version: FirefoxDriver
    at org.openqa.selenium.firefox.XpiDriverService.waitUntilAvailable(XpiDriverService.java:247)
    at org.openqa.selenium.firefox.XpiDriverService.start(XpiDriverService.java:159)
    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.firefox.FirefoxDriver.<init>(FirefoxDriver.java:147)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:125)
    at newpackage.MyClass.main(MyClass.java:12)
Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for [http://localhost:5176/hub/status] to be available after 45010 ms
    at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:100)
    at org.openqa.selenium.firefox.XpiDriverService.waitUntilAvailable(XpiDriverService.java:245)
    ... 8 more
Caused by: java.util.concurrent.TimeoutException
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:156)
    at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:75)
    ... 9 more

最佳答案

您应该使用WebDriverManager库,而不是手动设置驱动程序二进制文件。


WebDriverManager允许自动管理二进制文件
Selenium所需的驱动程序(例如chromedriver,geckodriver等)
WebDriver。


首先将其添加到您的项目中,例如

    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>3.7.1</version>
    </dependency>


然后将System.setProperty("webdriver.firefox.marionette","C:\\geckodriver.exe");替换为WebDriverManager.firefoxdriver().setup();,WebDriverManager将为您做所有的魔术:



它会检查计算机中安装的浏览器的版本(例如Chrome,Firefox)。
它会检查驱动程序的版本(例如chromedriver,geckodriver)。如果未知,它将使用驱动程序的最新版本。
如果WebDriverManager缓存中没有二进制文件(默认为〜/ .m2 / repository / webdriver),它将下载WebDriver二进制文件。
它将导出Selenium所需的适当的WebDriver Java环境变量(从
CLI或作为服务器)。


WebDriverManager解析Chrome浏览器的驱动程序二进制文件,
Firefox,Opera,PhantomJS,Microsoft Edge和Internet Explorer。对于
为此,它为这些浏览器提供了多个驱动程序管理器。这些
驱动程序管理器可以如下使用:


    WebDriverManager.chromedriver().setup();
    WebDriverManager.firefoxdriver().setup();
    WebDriverManager.operadriver().setup();
    WebDriverManager.phantomjs().setup();
    WebDriverManager.edgedriver().setup();
    WebDriverManager.iedriver().setup();


您应该使用Maven或Gradle来构建应用程序,请查看以下文章:Basic example program using WebDriver Java Maven

10-05 22:58