在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 $@
由于各种原因(我不得不为文件系统中的脚本创建临时文件等,我不喜欢这种技术)。
答案 0 :(得分:1)
从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);
答案 1 :(得分:0)
这个网站有帮助吗? https://testautomationarchives.blogspot.com/2013/08/how-to-configure-selenium-webdriver.html。
从上述网站的第5步开始,因为1-4正在安装内容:
步骤5:设置环境变量(Windows 7)