为什么WebdriverIO无法找到元素且报isDevTools未定义错误,如何解决?
报错原因
- 该错误由
$选择器执行时上下文丢失导致:WebdriverIO 提供的全局$/$$选择器默认依赖全局挂载的browser实例,你的代码中使用的是封装后的this.browser自定义实例,没有将该实例绑定到全局作用域,导致$内部访问的browser对象为undefined,读取isDevTools属性时就抛出了对应错误。 - 也有可能是你的 WebdriverIO 配置中关闭了全局对象注入,导致默认的全局
$选择器没有绑定可用的browser实例。
修复方法
方案1(最稳妥,无副作用)
直接用你已初始化完成的this.browser实例调用选择器,不需要依赖全局对象,修改代码如下:
await this.browser.url(url); await this.browser.pause(5000); const link = await this.browser.$('a');
方案2(适合单实例测试场景)
在测试脚本的初始化阶段将你的browser实例挂载到全局,原有$选择器的代码不需要改动:
// 初始化阶段执行一次即可 global.browser = this.browser; // 后续原有代码正常运行 await this.browser.url(url); await this.browser.pause(5000); const link = await $('a');
方案3(检查配置项)
打开你的wdio.conf.js配置文件,确认injectGlobals配置项没有被设为false。如果该配置关闭,全局$/browser对象默认不会注入,要么将配置改为injectGlobals: true,要么直接用方案1的写法。
内容的提问来源于stack exchange,提问作者utf_8
相关产品推荐
相关产品推荐

