Selenium - 在不修改 PATH 的情况下运行 ChromeDriver

tre*_*ode 2 java selenium selenium-chromedriver selenium-webdriver

我正在尝试使用 Selenium for Java 制作一个简单的框架。尝试设置它的不幸方面之一是我无权在我的 Windows 机器上编辑系统级变量。

在尝试运行仅尝试访问网站的单个 JUnit 测试,然后在我指向它的页面上断言它时,我不断收到一个错误,提示必须设置 ChromeDriver 可执行文件的路径。我在本地下载了这个。

Caused by: java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html
Run Code Online (Sandbox Code Playgroud)

现在,我可以通过System.setProperty("webdriver.chrome.driver", "/path/to/myexecutable.exe")在程序的主入口点内的类中抛出 a 来避免该错误,但不确定如何使用单元测试解决此问题。

我的基本测试:

package com.mytestpackage;

import org.junit.Assert;
import org.junit.Test;

public class UnitTest {

    @Test
    public void canGoToHomePage() {
        Pages.homePage().goTo();
        Assert.assertTrue(Pages.homePage().isAt());
    }
}
Run Code Online (Sandbox Code Playgroud)

还有我的三个简单类——浏览器、主页和页面:

浏览器

package com.mytestpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Browser {

    static WebDriver driver = new ChromeDriver();

    public static void goTo(String url) {
        driver.get(url);
    }

    public static String title() {
        return driver.getTitle();
    }
}
Run Code Online (Sandbox Code Playgroud)

主页

package com.mytestpackage;

public class HomePage {

    static String url = "http://test.salesforce.com";
    static String title = "Login | Salesforce";

    public void goTo() {
        Browser.goTo(url);
    }

    public boolean isAt() {
        return Browser.title().equals(title);
    }
}
Run Code Online (Sandbox Code Playgroud)

页面

package com.mytestpackage;

public class Pages {

    public static HomePage homePage() {
        return new HomePage();
    }
}
Run Code Online (Sandbox Code Playgroud)

令人沮丧的主要问题是无法编辑系统变量。任何hackaround/解决方法建议将不胜感激。

Vla*_*mov 5

看来你看到的问题是由 WebDriverManager 解决的 -官方文档

我们在我们的框架中使用它,它使所有用户免于携带 chromedriver 的系统属性和版本。(当你使用 chromedriver 的可执行文件时,你需要确保它也随着浏览器的更新而更新)

将以下方法添加到您的测试类:

@BeforeClass
public static void setupClass() {
    WebDriverManager.chromedriver().setup();
}
Run Code Online (Sandbox Code Playgroud)

并且不要忘记在您的 pom.xml 中附加一个对 WebDriverManager 的依赖(需要 Java 8 或更高版本):

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>3.0.0</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

...或在 Gradle 项目中:

dependencies {
    testCompile("io.github.bonigarcia:webdrivermanager:3.0.0")
}
Run Code Online (Sandbox Code Playgroud)

重要的旁注:从浏览器类中的 WebDriver 字段声明中删除“静态”。保持静态将不允许您继续执行并行测试。