我希望从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 $@
出于各种原因(方法不够优雅,需要在文件系统中创建临时文件等),我并不喜欢这种技术。