使用其他库将驱动程序路径发送到Selenium节点

问题描述 投票:1回答:1

当在硒网格中注册新节点时,我使用-D java参数指定可执行驱动程序的路径:

java -Dwebdriver.chrome.driver="../driver/chromedriver.exe" -jar selenium-server-standalone-3.3.1.jar -role node -hub http://localhost:4445/grid/register -nodeConfig config/defaultNodeConfig.json

我想使用webdrivermanager-java库(https://github.com/bonigarcia/webdrivermanager)管理驱动程序可执行文件。但是它使用System.setProperty()注册驱动程序,因此仅在运行该库的JVM中可用(我误会了吗?)。

我的问题是:

在启动node之前从命令行调用webdrivermanager-java的正确方法是什么,以及如何将下载的驱动程序的路径导出到Selenium节点的-D Java参数?

我有一个创建微型“节点运行器” java应用程序并在其中调用webdrivermanager和selenium-server-standalone.jar的想法,因此它们使用相同的JVM环境。

是否有更好的解决方案来使用webdrivermanager设置节点的驱动程序路径?

java selenium-webdriver selenium-grid2 webdrivermanager-java
1个回答
1
投票

实际上,恕我直言,最佳选择是创建一个Java应用程序,在该应用程序中您首先调用WebDriverManager,然后在集线器中注册该节点。像这样的东西:

Dependencies

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>3.141.59</version>
    </dependency>
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>3.7.1</version>
    </dependency>
</dependencies>

用于启动Selenium集线器的应用程序

import org.openqa.grid.selenium.GridLauncherV3;

public class StartHub {

    public static void main(String[] args) throws Exception {
        GridLauncherV3.main(new String[] { "-role", "hub", "-port", "4444" });
    }

}

用于在集线器中注册节点的应用程序(在此示例中为Chrome)

import org.openqa.grid.selenium.GridLauncherV3;

import io.github.bonigarcia.wdm.WebDriverManager;

public class StartNode {

    public static void main(String[] args) throws Exception {
        WebDriverManager.chromedriver().setup();
        GridLauncherV3.main(new String[] { "-role", "node", "-hub",
                "http://localhost:4444/grid/register", "-browser",
                "browserName=chrome" });
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.