如何强制Chrome后台启动?Ubuntu下Selenium GUI测试解决方案
我之前在Ubuntu 16.04跑Selenium测试时也碰到过这个烦人的焦点问题,给你几个亲测有效的解决方案,不用改测试逻辑也能搞定:
方案1:给Chrome加启动参数,把窗口移到屏幕外
这是最简单的方法,不需要额外装工具,只需要在Selenium的ChromeOptions里加个位置参数,把Chrome窗口移到显示器可见范围之外,既不影响测试运行,也不会抢你的操作焦点。
Java代码示例:
ChromeOptions options = new ChromeOptions(); // 把窗口移到屏幕左上角以外的位置,完全看不到 options.addArguments("--window-position=-32000,-32000"); // 如果你需要确保窗口不会意外弹出,还可以加上--disable-popup-blocking(可选) // options.addArguments("--disable-popup-blocking"); WebDriver driver = new ChromeDriver(options);
原理是Ubuntu的屏幕坐标以左上角为原点,负数坐标会让窗口超出显示范围,Selenium依然能正常控制这个窗口,但你完全看不到它,自然不会被抢焦点。
方案2:用Ubuntu窗口管理工具强制Chrome后台运行
如果不想改代码,可以用wmctrl这个窗口控制工具,自动把Chrome窗口最小化或隐藏:
- 先安装wmctrl:
sudo apt-get install wmctrl
- 写个简单的Shell脚本(比如命名为
chrome-background.sh):
#!/bin/bash # 等待Chrome窗口加载完成 sleep 1 # 找到Chrome窗口并隐藏,找不到就尝试关闭(不过你的测试会自动关闭,所以主要是隐藏) wmctrl -r "Google Chrome" -b add,hidden || wmctrl -c "Google Chrome"
- 给脚本加执行权限:
chmod +x /path/to/chrome-background.sh
- 在Selenium启动ChromeDriver之后,调用这个脚本:
// 在初始化driver之后执行脚本 Runtime.getRuntime().exec("/path/to/chrome-background.sh");
如果你连代码都不想改,还可以用Compiz的窗口规则:
- 安装Compiz配置工具:
sudo apt-get install compizconfig-settings-manager - 打开工具后,找到「窗口管理」→「窗口规则」,添加一条规则:
- 「匹配窗口标题」填
Google Chrome - 「动作」选择「最小化」或「隐藏」
这样只要Chrome窗口打开,系统会自动把它移到后台。
- 「匹配窗口标题」填
方案3:用Xvfb虚拟显示器运行Chrome(非无头但完全后台)
虽然你说不能用无头模式,但Xvfb是虚拟显示服务,Chrome会在一个看不见的虚拟屏幕里运行,完全不会干扰你的主屏幕,而且这是真实的GUI环境,和无头模式有区别:
- 安装Xvfb:
sudo apt-get install xvfb
- 在Java代码里集成Xvfb:
import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.server.browserlaunchers.Xvfb; public class Test { public static void main(String[] args) { // 启动Xvfb虚拟显示器 Xvfb xvfb = new Xvfb(); xvfb.start(); ChromeOptions options = new ChromeOptions(); options.addArguments("--no-sandbox"); // Ubuntu下可能需要这个参数 WebDriver driver = new ChromeDriver(options); // 执行你的测试逻辑... // 测试结束后关闭driver和Xvfb driver.quit(); xvfb.stop(); } }
或者你也可以在IntelliJ的运行配置里,把启动命令改成:
xvfb-run -a java -jar your-test-jar-file.jar
这样Chrome全程在虚拟屏幕里运行,你的主屏幕完全不会被打扰。
内容的提问来源于stack exchange,提问作者Captain_Meow_Meow
相关产品推荐
相关产品推荐

