WDIO同时运行基础配置与子配置,如何仅执行子配置?
WDIO 8子配置执行重复测试问题解决办法
问题场景
用Node 16搭配WDIO 8搭建测试框架,为统一配置做了wdio.conf.base基础配置文件,让子配置继承它的设置。但运行子配置时会跑两套完全一样的测试——一套基于基础配置执行,另一套基于合并后的子配置执行。删掉配置里的重复条目后问题依旧,推测是导入基础配置时它被直接评估执行,合并后又再次触发执行导致。
子配置代码:
import wdioConf = require('./wdio.conf') // 以主配置为基础,覆盖环境特定信息 export const config = deepmerge(wdioConf.config, { user: process.env.LT_USERNAME || "YOUR LAMBDATEST USERNAME", key: process.env.LT_ACCESS_KEY || "YOUR LAMBDATEST ACCESS KEY", capabilities: [{ browserName: "chrome", browserVersion: "114.0", "path": "/wd/hub", "hostname": "hub.lambdatest.com", "port": 80, "LT:Options": { "platformName": "Windows 10", "project": "LambdaPOC", "build": "Implementation 1", "w3c": true, "plugin": "node_js-webdriverio", "tunnel": true } }], }, { clone: false })
package.json运行脚本:
"wdio-lambda-chrome": "wdio run test/webdriver/wdio.lambda.chrome.conf.ts"
解决步骤
1. 避免基础配置被WDIO自动加载
WDIO会自动识别wdio.conf.ts这类命名的文件作为配置文件执行,这是核心问题:
- 把基础配置文件重命名为非默认识别的名称,比如
wdio.conf.base.ts,防止WDIO单独加载它。 - 确保基础配置仅作为模块被子配置导入,不成为独立的可执行配置。
2. 调整合并逻辑并确保配置唯一性
修改子配置的导入和合并方式,避免原配置对象被意外复用:
import wdioBaseConf from './wdio.conf.base.ts' import deepmerge from 'deepmerge' export const config = deepmerge(wdioBaseConf.config, { user: process.env.LT_USERNAME || "YOUR LAMBDATEST USERNAME", key: process.env.LT_ACCESS_KEY || "YOUR LAMBDATEST ACCESS KEY", capabilities: [{ browserName: "chrome", browserVersion: "114.0", "path": "/wd/hub", "hostname": "hub.lambdatest.com", "port": 80, "LT:Options": { "platformName": "Windows 10", "project": "LambdaPOC", "build": "Implementation 1", "w3c": true, "plugin": "node_js-webdriverio", "tunnel": true } }], // 明确指定测试文件路径,避免重复引入 specs: ['./test/**/*.spec.ts'] }, { clone: true }) // 开启clone,防止修改原基础配置对象引发意外
3. 确认执行入口唯一
运行测试时,确保只传入子配置文件作为入口:
"wdio-lambda-chrome": "wdio run test/webdriver/wdio.lambda.chrome.conf.ts"
不要让WDIO同时检测到基础配置和子配置,比如不要把基础配置放在WDIO默认扫描的目录下,或者通过--config参数明确指定子配置路径。
4. 检查基础配置中的执行代码
排查wdio.conf.base里是否有立即执行的代码(比如IIFE、直接调用的函数),如果有就删掉,保证基础配置只导出配置对象,不执行任何测试相关逻辑。
内容的提问来源于stack exchange,提问作者Driver
相关产品推荐
相关产品推荐

