WebdriverIO结合Jasmine使用时异步函数超时及配置不生效问题排查
根因分析
- 测试卡点在
beforeEach钩子,未进入测试用例:你提到click_app_launcher内的调试日志未输出,说明该函数从未被调用。卡点出在beforeEach钩子中:LightningLeadPage.open()、LightningLeadPage.login()都是WebdriverIO的异步命令,返回Promise对象。而当前beforeEach被定义为同步函数,没有正确等待这些Promise执行完成,导致钩子一直挂起,永远无法进入后续的it测试块。 - 超时时间仍为10000ms的原因:报错提示的10000ms并非你配置的24小时
jasmineNodeOpts.defaultTimeoutInterval,触发原因有二:jasmineNodeOpts配置未被正确加载:通常是放置位置错误(需放在wdio.conf.js的根配置下,不能嵌套在capabilities、services等其他配置块中),或存在语法错误导致配置被忽略,Jasmine自动使用了默认的10s超时。- WebdriverIO的Jasmine运行器在异步钩子未正确处理Promise时,会触发内置的10s超时兜底。
- 废弃警告的触发逻辑:日志中“异步钩子同时使用done回调和返回Promise”的警告,是因为WebdriverIO的Jasmine适配层会为同步定义的钩子自动注入done回调,而你的钩子中调用的
open()、login()又返回了Promise,二者冲突导致运行逻辑异常。
解决方案
按优先级从高到低执行:
1. 修复异步测试逻辑(核心问题)
WebdriverIO v7及以上版本已废弃同步执行模式,所有WDIO命令都需要显式等待Promise完成,修改代码如下:
测试用例代码:
describe('Lead Routing Functionality', () => { // beforeEach 添加 async 关键字 beforeEach(async function () { // 所有WDIO命令前加 await await LightningLeadPage.open(); await LightningLeadPage.login(); console.log('[TEST STEP INFO]: Checking Header: '); }); // it 块也添加 async 关键字 it('Verify validation', async () => { // 等待页面对象方法执行完成 await LightningLeadPage.click_app_launcher(); }); });
页面对象类代码:
export default class Lightning_Page { // 方法添加 async 修饰 async click_app_launcher() { console.log("[TEST STEP INFO]: Verify App launcher icon is present. "); console.log('DEBUG : I am waiting...') // waitForExist 前加 await await this.appLauncher().waitForExist(this.waitDuration()); console.log("[TEST STEP INFO]: Clicking on App Launcher"); // click 前加 await await this.appLauncher().click(); } }
2. 验证Jasmine超时配置
确认wdio.conf.js中的jasmineNodeOpts配置在根层级,无嵌套错误,可先配置为30000ms验证是否生效(无需直接设置24小时超时):
// wdio.conf.js 根层级配置示例 exports.config = { // 其他原有配置... waitforTimeout: 10000, connectionRetryTimeout: 90000, connectionRetryCount: 3, wdioRetries:3, jasmineNodeOpts: { defaultTimeoutInterval: 30000, expectationResultHandler: function(passed, assertion) { // do something } }, }
注意:不需要直接修改全局
jasmine.DEFAULT_TIMEOUT_INTERVAL,WDIO的Jasmine适配会自动读取jasmineNodeOpts.defaultTimeoutInterval完成赋值。
3. 排除版本兼容问题
如果你使用的是WebdriverIO v5及更早版本,建议升级到v7+稳定版本,旧版本的同步执行逻辑与Jasmine的适配存在大量已知冲突,容易触发上述异常。
内容的提问来源于stack exchange,提问作者Afsal
相关产品推荐
相关产品推荐

