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

WebdriverIO多浏览器并发执行时如何获取对应worker编号?

WebdriverIO获取worker编号实现窗口排布方案

直接获取worker编号的官方方法

WebdriverIO启动每个worker进程时,会自动向进程注入独立的环境变量WDIO_WORKER_ID,值就是你在日志前缀[n-n]中看到的第二个worker编号,完全不需要自己维护计数,也不存在竞态问题。

你可以在测试脚本、wdio配置文件的任意钩子函数中直接读取该变量:

// 读取worker编号并转为数字
const workerId = parseInt(process.env.WDIO_WORKER_ID, 10)
// 按需求对5取模得到位置索引
const positionIdx = workerId % 5

接下来就可以用这个索引排布窗口位置,示例如下:

// 预设5个窗口的排布参数,示例按1920*1080屏幕横向均分布局
const windowConfigs = [
  {x: 0, y: 0, width: 384, height: 1080},
  {x: 384, y: 0, width: 384, height: 1080},
  {x: 768, y: 0, width: 384, height: 1080},
  {x: 1152, y: 0, width: 384, height: 1080},
  {x: 1536, y: 0, width: 384, height: 1080}
]
// 应用窗口位置配置
await browser.setWindowRect(
  windowConfigs[positionIdx].x,
  windowConfigs[positionIdx].y,
  windowConfigs[positionIdx].width,
  windowConfigs[positionIdx].height
)

你可以根据自己的演示需求修改windowConfigs里的坐标和尺寸参数。

替代方案(自定义编号场景适用)

如果你需要自定义worker的标记规则,可以在wdio.conf.js的onWorkerStart钩子中由主进程统一分配编号,这个钩子是主进程在每个worker启动时触发的,所有编号由主进程统一维护,也不会出现竞态问题:

// wdio.conf.js
let workerCounter = 0
exports.config = {
  // 其他配置项省略
  onWorkerStart: function (cid, caps, specs, args, execArgv) {
    process.env.CUSTOM_WORKER_ID = workerCounter++
  }
}

之后在worker进程中直接读取process.env.CUSTOM_WORKER_ID即可使用。

关于自增系统变量方案的说明

自己读写全局系统变量的方式确实会引发竞态条件,多进程同时读取变量时可能拿到相同的值,导致编号重复,没必要采用该方案,使用官方自带的WDIO_WORKER_ID即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:06:02