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

为何在WDIO的$和$$命令前用await?两种写法哪个正确?

WDIO 7+ 常见疑问解答

问题1:为什么要在$(...)或$$(...)前加await?它们返回的是Promise吗?

  • 没错,WDIO里的$和$$返回的就是Promise,不是直接的元素对象或数组。
  • 因为WDIO的元素定位是异步操作:它得和浏览器/驱动通信,等待页面元素加载、定位完成,这个过程没法同步完成。
  • 如果不加await,你拿到的只是一个还没完成的Promise,根本没法直接调用.getText()这类元素方法。只有用await等Promise resolve后,才能拿到真实的元素对象($)或元素数组($$)。

问题2:两种getValue写法哪种正确?

先看两种写法:

写法一

async getValue(){
    return await $(some_selector).getText();
}

写法二

async getValue(){
    return (await $(some_selector)).getText();  // 注意括号
}

两种写法都是正确的,只是执行逻辑略有不同:

  • 写法一:JS会先执行$(some_selector).getText(),WDIO的元素命令支持链式调用时自动处理Promise——哪怕你没先await$,调用.getText()时会自动等元素定位完成,最后await等待.getText()的结果返回。
  • 写法二:先明确用await等$(some_selector)完成,拿到元素对象后再调用.getText()(.getText()本身还是异步的,但因为外层是async函数,结果会自动包装成Promise)。

实际使用中两者效果完全一致,不过写法二更直观,能清晰看到你是先等元素定位好再操作,可读性更强。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:06:28