通过运行TestNG的Java命令向Chrome传递--headless参数的方法
解决方案
1. 调整测试代码中浏览器初始化逻辑
Selenium本身不会自动读取自定义JVM参数并应用到浏览器配置,你需要在ChromeOptions初始化的代码中新增读取系统参数、判断是否开启无头模式的逻辑:
ChromeOptions options = new ChromeOptions(); // 读取JVM参数判断是否开启headless,默认不开启 String isHeadless = System.getProperty("browser.headless", "false"); if ("true".equalsIgnoreCase(isHeadless)) { // Chrome 112及以上版本推荐用新版headless模式,和有头浏览器行为一致性更高 options.addArguments("--headless=new"); // 旧版Chrome可替换为下面的写法 // options.addArguments("--headless"); // 搭配窗口尺寸配置,避免无头模式下元素定位失败 options.addArguments("--window-size=1920,1080"); } // 保留你原本的其他浏览器配置逻辑 WebDriver driver = new ChromeDriver(options);
2. 调整运行命令
在原启动命令中新增-Dbrowser.headless=true参数即可开启无头模式,示例如下:
java -Dbrowser=CHROME -Dbrowser.headless=true -Dtestng.dtd.http=true -Dwdm.chromeDriverVersion=94.0.4606.61 \ -classpath ourTest.jar;ourApplication.jar org.testng.TestNG -testjar ourTest.jar
补充说明
- 之前的尝试不生效的原因:直接在TestNG启动命令后追加
--headless参数会被TestNG识别为自身运行参数,不会传递给Selenium浏览器配置;自定义的-DadditionalBrowserArguments等参数没有对应代码逻辑读取解析,自然也不会生效。 - 如果不需要每次都开启无头模式,只要去掉命令中的
-Dbrowser.headless=true参数即可恢复普通有头模式运行。
内容的提问来源于stack exchange,提问作者Marc Le Bihan
相关产品推荐
相关产品推荐

