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

4

我希望从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使用私有方法创建驱动程序服务,因此我无法自定义它。那么,我该如何配置Selenium启动的Firefox进程的环境?

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

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

出于各种原因(方法不够优雅,需要在文件系统中创建临时文件等),我并不喜欢这种技术。


所以,您需要指定FF二进制路径吗?如果是的话,请使用FirefoxProfile并查看此处:https://dev59.com/Ueo6XIcBkEYKwwoYKRHd#24891650 - Ivan Pronin
1
我需要设置DISPLAY环境变量。 - user4851
1
Firefox的显示环境是什么意思?这不是系统环境变量吗? - Gaurang Shah
1
我想将Firefox环境中DISPLAY变量的值设置为与系统的DISPLAY环境变量不同的值。 - user4851
2个回答

2
自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);

0

这个网站有帮助吗? https://testautomationarchives.blogspot.com/2013/08/how-to-configure-selenium-webdriver.html

从上面的网站开始第5步,因为1-4是安装过程:

第5步:设置环境变量(Windows 7)

  1. 右键点击电脑
  2. 点击属性
  3. 点击“高级设置”
  4. 在“系统属性”中,点击“高级”选项卡
  5. 点击“环境变量”
  6. 复制JDK安装路径:C:\Program Files\Java\jdk1.6.0\bin
  7. 在环境变量窗口下,点击“新建”(系统变量),并设置路径:C:\Program Files\Java\jdk1.6.0\bin。如果路径变量已存在,则进行编辑。
  8. 设置CLASSPATH:复制JDK安装路径:
  9. 在环境变量窗口下,点击“新建”(用户变量)并设置CLASSPATH:
  10. 环境设置完成,现在可以启动JAVA IDE了。

1
谢谢,但我想不需要。那些指令是用于设置系统或用户环境变量,但我只想为Firefox进程自定义环境变量。 - user4851

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接