有没有一种方法可以使gecko.driver在共享代码中对所有人可用?

时间:2019-06-25 16:54:04

标签: java eclipse selenium firefox geckodriver

我将通过BitBucket分享用Selenium / Cucumber框架编写的代码。我使用以下代码使代码在Firefox中可执行。

System.setProperty("webdriver.gecko.driver","/Users/firatkaymaz/eclipse-workspace/SeleniumTest/drivers/geckodriver/geckodriver");
driver = new FirefoxDriver();

由于Gecko驱动程序路径信息与我的本地计算机有关,如何在另一台PC或笔记本电脑上运行代码?有没有办法使gecko.driver对将要在共享代码中运行的人有用,或者他们必须自己更改路径信息?

2 个答案:

答案 0 :(得分:0)

您有多种选择:

设置适当的环境变量

请勿使用System.setProperty来设置webdriver.gecko.driver。应该在机器上而不是代码中将其设置为环境变量。这使您可以在多个位置使用gecko驱动程序配置多个开发机器/构建盒。每台机器仅需要设置环境变量webdriver.gecko.driver来指向本地机器上的相关路径,并且它“将正常工作”。

使用驱动程序二进制下载程序maven插件

这将使您的Maven项目自动下载在关联的RepositoryMap.xml中指定的驱动程序二进制文件(显然,您需要使用Maven进行构建/依赖管理)。如果您尚未定义二进制文件,它将下载一组默认的二进制文件(但它们可能已过期)。有关更多详细信息,See Here

<plugins>
    <plugin>
        <groupId>com.lazerycode.selenium</groupId>
        <artifactId>driver-binary-downloader-maven-plugin</artifactId>
        <version>1.0.17</version>
        <configuration>
            <!-- root directory that downloaded driver binaries will be stored in -->
            <rootStandaloneServerDirectory>/my/location/binaries</rootStandaloneServerDirectory>
            <!-- Where you want to store downloaded zip files -->
            <downloadedZipFileDirectory>/my/location/zips</downloadedZipFileDirectory>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>selenium</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

不幸的是,尽管这确实下载了二进制文件,但Maven并没有在不同的JVM之间传递环境变量,而是在不同的阶段启动。因此,您需要将一些配置传递到测试配置中,例如:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <systemPropertyVariables>
            <!--Set properties passed in by the driver binary downloader-->
            <webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver>
            <webdriver.ie.driver>${webdriver.ie.driver}</webdriver.ie.driver>
            <webdriver.opera.driver>${webdriver.opera.driver}</webdriver.opera.driver>
            <webdriver.gecko.driver>${webdriver.gecko.driver}</webdriver.gecko.driver>
            <webdriver.edge.driver>${webdriver.edge.driver}</webdriver.edge.driver>
        </systemPropertyVariables>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <!--This goal makes the build fail if you have test failures-->
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

See Here中的完整示例。

使用Webdriver Manager

这将允许您使用Java代码下载和配置驱动程序二进制文件。您可以使用versions.properties文件指定特定版本:

public class ChromeTest {

    private WebDriver driver;

    @BeforeClass
    public static void setupClass() {
        WebDriverManager.chromedriver().setup();
    }

    @Before
    public void setupTest() {
        driver = new ChromeDriver();
    }

    @After
    public void teardown() {
        if (driver != null) {
            driver.quit();
        }
    }

    @Test
    public void test() {
        // Your test code here
    }

}

有关更多信息,See Here

答案 1 :(得分:0)

您可以改为使用硒服务器

Download here

以相同的路径收集selenium-server-standalone-3.141.59.jargeckodriver以易于使用

  1. 使用命令行转到您的路径并运行以下命令:

java -jar selenium-server-standalone-3.141.59.jar -role hub

如果成功,您将获得以下日志:

[Hub.start] - Selenium Grid hub is up and running
[Hub.start] - Nodes should register to http://somethingIP:4444/grid/register/
[Hub.start] - Clients should connect to http://somethingIP:4444/wd/hub
  1. 打开另一个命令行,然后运行以下命令(转到您的路径):

java -Dwebdriver.gecko.driver=geckodriver -jar selenium-server-standalone-3.141.59.jar -role node -hub http://localhost:4444/grid/register

如果成功,您将获得以下日志:

The node is registered to the hub and ready to use

在您的代码中,使用以下代码初始化driver

DesiredCapabilities dc = new DesiredCapabilities();
WebDriver driver;

//replace localhost with the real IP if you try to access it from another PC
URL url = new URL("http://localhost:4444/wd/hub");
dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.FIREFOX);

driver = new RemoteWebDriver(url, dc);

You can read the documentation here