You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Webdriver.io在Ubuntu虚拟机执行测试时频繁断连的问题求助

解决Ubuntu虚拟机中WDIO测试频繁中断(ECONNREFUSED 127.0.0.1:4444)的问题

看你描述的情况,Mac上headful Chrome跑WDIO测试完全正常,到Ubuntu虚拟机就频繁报connect ECONNREFUSED 127.0.0.1:4444,偶尔能成但用browser.pause(1000)也不靠谱——这个问题我之前帮不少人排查过,主要是虚拟机环境和本地Mac的差异导致的,咱们一步步来解决:

首先明确报错核心:这个错误说明WDIO没法和ChromeDriver(或你用的Selenium Server)建立连接,要么是ChromeDriver没正常启动,要么是启动后因环境问题很快崩溃,或是连接超时。

下面是针对性的解决方案:

1. 确保ChromeDriver和Ubuntu上的Chrome版本严格匹配

Mac和Ubuntu上的Chrome版本大概率不一样,ChromeDriver对版本要求极严,差一个小版本都可能出问题。如果你的WDIO用的是@wdio/chromedriver-service,可以直接开启自动适配:
在wdio.conf.js里修改service配置:

services: [
    ['chromedriver', {
        autoInstall: true, // 自动安装匹配当前Chrome的ChromeDriver版本
        args: ['--verbose'] // 可选,开启日志方便排查启动问题
    }]
]

如果是手动管理ChromeDriver,去ChromeDriver官网下载和Ubuntu上Chrome版本完全一致的包替换即可。

2. 给Chrome添加适配虚拟机的启动参数

Ubuntu虚拟机(尤其是无界面或资源有限的虚拟机)需要额外的Chrome启动参数才能稳定运行,在wdio.conf.js的capabilities里加上这些:

capabilities: [{
    browserName: 'chrome',
    'goog:chromeOptions': {
        args: [
            '--no-sandbox', // 禁用沙箱,虚拟机通常没有完整的沙箱环境
            '--disable-dev-shm-usage', // 解决/dev/shm空间不足导致Chrome崩溃的问题
            '--disable-gpu', // 虚拟机无需GPU加速
            '--window-size=1920,1080' // 固定窗口大小,避免元素定位异常
            // 若为headful模式运行,虚拟机需启动Xvfb模拟显示,否则Chrome无法启动
        ]
    }
}]

如果你的Ubuntu虚拟机是无界面运行headful Chrome,必须先启动Xvfb模拟显示:

# 安装Xvfb
sudo apt-get install xvfb
# 启动一个显示实例(比如:99)
Xvfb :99 -screen 0 1920x1080x24 &
# 导出环境变量,让Chrome使用该显示
export DISPLAY=:99

之后再运行WDIO测试。

3. 优化WDIO的连接重试和超时配置

虚拟机资源有限,ChromeDriver启动可能比Mac慢,所以要调整WDIO的连接超时和重试次数:
在wdio.conf.js里添加:

connectionRetryCount: 3, // 连接失败时重试3次
connectionRetryTimeout: 10000, // 每次重试等待10秒
waitforTimeout: 10000, // 元素等待超时时间设为10秒

这样即使第一次连接失败,WDIO会自动重试,不用依赖不可靠的browser.pause。

4. 替换browser.pause为显式等待

browser.pause是硬等待,既不可靠又拖慢测试,换成基于条件的显式等待才是正确做法。比如等待元素显示:

// 等待元素显示,最多等10秒
await $('#target-element').waitForDisplayed({ timeout: 10000 });
// 或者用waitUntil等待某个条件满足
await browser.waitUntil(async () => {
    const text = await $('#status').getText();
    return text === 'Loaded';
}, { timeout: 10000, timeoutMsg: '页面状态未加载完成' });

这样只有当条件满足时才继续执行,比固定暂停靠谱得多。

5. 检查虚拟机的资源分配

如果以上方法都试过还是偶尔失败,那可能是虚拟机的CPU、内存分配太少了。Chrome本身很吃资源,虚拟机至少要分配2核CPU和4GB内存,不然Chrome可能因资源不足崩溃,导致WDIO连接失败。

最后再提一下你遇到的报错:

ERROR: connect ECONNREFUSED 127.0.0.1:4444 chrome at new RuntimeError (/mypath/node_m...

本质就是ChromeDriver没在4444端口正常监听,要么是没启动起来,要么是启动后崩溃了,按照上面的步骤排查,应该能解决问题。

内容的提问来源于stack exchange,提问作者Pavel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:55:51