java - 如何为 Selenium Java FirefoxDriver 设置环境变量?

标签 java selenium firefox

在 Java 单元测试中,我想使用 Selenium 通过 Firefox 测试我的网页。我的测试要求我为 Firefox 设置一个环境变量。 (具体来说,我想设置 DISPLAY 变量。)

FirefoxBinary类有一个方法 setEnvironmentProperty ,这听起来像是应该为 Firefox 进程运行的环境设置环境变量,但实际上并没有这种效果。 (我已经用 cat /proc/<firefox_pid>/environ 确认了这一点。)

回到 selenium-java 3.0.1,我可以构建一个 GeckoDriverService使用自定义环境变量,以及 FirefoxDriver构造函数接受驱动程序服务作为参数,如下所示:

Map<String, String> customEnvironmentMap = new HashMap<>();
customEnvironmentMap.put("DISPLAY", ":1");
GeckoDriverService driverService = new GeckoDriverService.Builder(binary)
        .withEnvironment(customEnvironmentMap)
        .usingPort(0)
        .build()
FirefoxDriver driver = new FirefoxDriver(driverService, capabilities, null);

自定义变量将存在于 geckodriver 进程的环境和 Firefox 进程的环境中。

该构造函数在版本 3.4.0 中不存在,并且 FirefoxDriver使用私有(private)方法创建驱动程序服务,所以我无法自定义它。那么,如何配置Selenium启动的Firefox进程的环境呢?

我目前的解决方法是用这样的脚本替换 geckodriver 可执行路径:

#!/bin/bash
exec /usr/bin/env DISPLAY=:1 /path/to/geckodriver $@

我不太喜欢这种技术,原因有很多(它很老套,我必须在文件系统中为脚本创建一个临时文件,等等)。

最佳答案

从 Selenium 3.7.1 开始,采用 GeckoDriverService 的构造函数已返回,因此您可以再次执行以下操作:

Map<String, String> environment = new HashMap<>();
environment.put("DISPLAY", ":1");
GeckoDriverService service = new GeckoDriverService.Builder()
        .usingAnyFreePort()
        .withEnvironment(environment)
        .build();
FirefoxDriver driver = new FirefoxDriver(service);

关于java - 如何为 Selenium Java FirefoxDriver 设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44057317/

相关文章:

java - 敌人生成 Android

python - Selenium Python 3.0.0b2 与最新的 Firefox 发布版本 48.0 不兼容

javascript - 重置原始值约 :config firefox via javascript or imacros

javascript - 如何隐藏 Firefox 上下文菜单以显示我自己的菜单?

html - mix-blend-mode multiply 在 FF 和 Chrome 中的工作方式不同

Java 守护进程一步一步

java - AspectJ EDT-Checker 代码问题

java - 根据其属性从 Set 中选择一个元素

java - 我如何在 testNG 中使用 IAnnotationTransformer?

java - Appium 的 implicitlyWait 不起作用