WDIO测试中箭头函数无法访问this的解决方案咨询
WDIO箭头函数无法访问测试级
this的解决方案 核心结论
箭头函数没法拿到WDIO的测试级this,因为箭头函数的this是词法绑定的(跟着外层作用域走),而WDIO是把测试上下文(包含wdioRetries、test配置这些)动态绑定到普通函数的this上的。如果要访问这些测试上下文属性,你只能继续用普通匿名函数(或者具名函数)。
替代方案(不用this也能实现需求)
如果团队规范硬要箭头函数,试试这些办法:
- 获取重试次数:可以用WDIO提供的
getTestContext()方法(WDIO v7及以上支持)直接拿测试上下文:
或者也可以查看WDIO注入的环境变量,比如import { getTestContext } from '@wdio/utils'; it('No Place Like Home', async () => { const ctx = getTestContext(); console.log(ctx.wdioRetries); // 0是首次运行,1是第一次重试 });process.env.WDIO_RETRY(不同版本变量名可能有差异,需要自行验证)。 - 自定义测试超时:不用通过
this.test修改,直接在it的第三个参数里配置:it('No Place Like Home', async () => { // 你的测试逻辑 }, { timeout: 15000 }); // 这里直接设置超时时间
为什么箭头函数不行?
WDIO在执行测试用例时,会把包含重试次数、测试配置的上下文对象,通过Function.prototype.call()或apply()绑定到普通函数的this上。但箭头函数没有自己的this,它的this是定义时所在的外层作用域的this,自然拿不到WDIO注入的测试上下文。
内容的提问来源于stack exchange,提问作者user3583204
相关产品推荐
相关产品推荐

