为何在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
相关产品推荐
相关产品推荐

