Nightwatch测试中点击浏览器窗口即关闭崩溃问题求助
针对你在Windows 10上遇到的这个棘手问题——只要左键/右键点击Nightwatch启动的Chrome窗口,浏览器就立刻关闭并抛出chrome not reachable错误,而Ubuntu上完全正常的情况,我整理了几个经过验证的解决方案,你可以逐一尝试:
1. 先禁用测试并行执行试试
你的配置里开启了4个并行测试进程,虽然并行能提升效率,但Windows系统上有时候多个Chrome实例的资源竞争会触发一些奇怪的会话终止行为。先把并行关掉测试看看:
修改你的Nightwatch配置文件中的test_workers部分:
"test_workers": { "enabled": false }
保存后重新运行测试,点击Chrome窗口看看是否还会触发关闭。如果没问题,说明并行执行是诱因,后续可以尝试调整worker数量为1,或者排查并行模式下的资源冲突问题。
2. 调整ChromeOptions参数,修复兼容性问题
你当前配置里的w3c: false可能和新版Chrome/ChromeDriver不兼容,加上几个常用的稳定性参数试试:
更新desiredCapabilities里的chromeOptions:
"desiredCapabilities": { "browserName": "chrome", "chromeOptions": { "w3c": true, "args": [ "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36; Nightwatch", "window-size=1056,772", "--no-sandbox", "--disable-dev-shm-usage" ] } }
--no-sandbox和--disable-dev-shm-usage主要是解决权限和内存限制问题,虽然更多用于Linux,但Windows环境下偶尔也能解决这类异常关闭的情况;开启W3C模式则能让ChromeDriver和浏览器的通信更规范。
3. 严格匹配Chrome和ChromeDriver版本
虽然你说已经升级到最新版,但一定要确认ChromeDriver的版本和你本地安装的Chrome版本完全一致——比如Chrome是114.0.5735.198,ChromeDriver也必须是114.x的对应版本,哪怕差一个小版本都可能出现兼容性问题。你可以重新下载和当前Chrome版本完全匹配的ChromeDriver,替换掉bin/chromedriver.exe再测试。
4. 绕过Selenium Server,直接用ChromeDriver启动
你当前是通过Selenium Server间接启动ChromeDriver,试试直接让Nightwatch调用ChromeDriver,减少中间层可能的问题:
注释掉配置里的selenium块,然后在test_settings.default里添加webdriver配置:
"test_settings": { "default": { "launch_url": "http://localhost", "silent": true, "screenshots": { "enabled": true, "on_failure": false, "on_error": false, "path": "" }, "desiredCapabilities": { "browserName": "chrome", "chromeOptions": { "w3c": true, "args": [ "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36; Nightwatch", "window-size=1056,772" ] } }, "webdriver": { "start_process": true, "server_path": "bin/chromedriver.exe" } } }
这样Nightwatch会直接启动ChromeDriver,跳过Selenium Server,很多时候能解决这类异常会话终止的问题。
5. 排查日志找更详细的错误信息
如果上面的方法都没用,建议开启更详细的日志来定位问题:
- 在ChromeOptions里添加
--enable-logging --v=1参数,让Chrome输出详细日志到控制台 - 查看Selenium日志目录
seleniumLog里的文件,看看浏览器关闭前后有没有异常记录
这些日志能帮你找到更具体的触发原因,比如是某个权限问题、扩展冲突还是会话通信错误。
内容的提问来源于stack exchange,提问作者Joshua

