如何通过 System.setProperty() 启动多个版本的 Geckodriver

Posted

技术标签:

【中文标题】如何通过 System.setProperty() 启动多个版本的 Geckodriver【英文标题】:How to initiate multiple versions of Geckodriver through System.setProperty() 【发布时间】:2020-05-20 06:54:03 【问题描述】:

我不知道我是否在监督某些事情,但是否可以在同一个 JVM 中使用多个 geckodriver 版本?

问题出在

System.setProperty("webdriver.gecko.driver", "path of the geckodriver1");
driver1 = new FirefoxDriver();

System.setProperty("webdriver.gecko.driver", "path of the geckodriver2");
driver2 = new FirefoxDriver();

我将在其中定义系统属性。对于单个实例,这没问题并且工作正常,但是如何用另一个 geckodriver 定义 FirefoxDriver。进程将并行运行,因此全局设置会相互干扰。

我知道,您可以使用相同的驱动程序启动多个 Firefox 会话,但我需要支持不同的 Firefox 版本,因此我也在寻找具有多个 geckodrivers 的解决方案。

感谢您的建议。

【问题讨论】:

【参考方案1】:

系统属性

程序可以使用System Properties 对象在其整个生命周期内维护其配置。 Selenium 的 java 客户端本身使用 Properties 对象来维护自己的配置。 System 类维护一个描述当前工作环境配置的Properties 对象。系统属性包括有关当前用户、Java 运行时的当前版本以及用于分隔文件路径名组成部分的字符的信息。

因此,您将无法在单个程序中使用多个 GeckoDriver版本。


演示

提取一些最重要的系统属性的演示:

代码块:

package Java_Experiments;

public class system_getProperty 

    public static void main(String[] args) 

        System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
        System.out.println(System.getProperty("webdriver.chrome.driver"));
        System.out.println(System.getProperty("subliminal.message", "Selenium WebDriver!"));
        System.out.println("Java Runtime Environment version: "+System.getProperty("java.version"));
        System.out.println("Java Runtime Environment vendor: "+System.getProperty("java.vendor"));
        System.out.println("Java vendor URL: "+System.getProperty("java.vendor.url"));
        System.out.println("Java installation directory: "+System.getProperty("java.home"));
    

控制台输出:

C:\Utility\BrowserDrivers\chromedriver.exe
Selenium WebDriver!
Java Runtime Environment version: 1.8.0_172
Java Runtime Environment vendor: Oracle Corporation
Java vendor URL: http://java.oracle.com/
Java installation directory: C:\Program Files\Java\jdk1.8.0_172\jre

【讨论】:

以上是关于如何通过 System.setProperty() 启动多个版本的 Geckodriver的主要内容,如果未能解决你的问题,请参考以下文章

如何在小程序中设置 Http 代理

设置java系统属性的最佳实践是什么,-D或System.setProperty()?(What is best practice for setting java system properties

安讯士SSL呼叫

码头响应字符编码

Fiddler 抓取eclipse中的请求

如何通过 Java 使用 Selenium 将功能和选项传递给 Firefoxdriver