如何在WebdriverIO异步模式下等待browser.keys() ?



我正在努力做一些async WebdriverIO v7,在同步模式是很容易的。

上下文:我正在使用一个React屏蔽输入组件,它有一个错误(我不能修复也不能改变组件),如果我输入太快,键没有注册,光标走到最后,所以我需要以相对较慢的速度输入。当我使用await input.setValue('test')时,输入速度太快,它只输入第一个字母,不能输入其余的,所以我需要分别输入每个字符,并在每次按键之间稍等一下。

基本上我想在异步模式下做这个:

[...textValue].forEach(char => {
browser.keys(char);
browser.pause(100);
});

我尝试使用waitUntil(),但因为这是一个屏蔽输入,如果我输入123456,输入中的值将是123.456.___-_,所以我不能直接比较两个字符串并等待直到它们相等。而且,对于这么简单的事情,这似乎要做很多工作,所以我想知道是否有一个更好的方法。

谢谢!

编辑:到目前为止,我尝试将每个browser.key(char)上保存的输入文本与waitUntil()条件下的实际input.getValue()进行比较,它仍然不起作用

好了,问题解决了。问题是forEach循环不能等待异步操作,所以我现在使用for..of循环(参考)。

async typeSlowly (input, content) {
let inputSoFar = '';
for (const char of content) {
inputSoFar = inputSoFar.concat(char);
await browser.keys(char);
await browser.waitUntil(
async () => (await input.getValue()) === inputSoFar,
{
timeout: 500,
timeoutMsg: 'expected text to be different after 500ms'
}
);
}
}

我省略了屏蔽逻辑部分,因为这只是一个细节,这里重要的一点是循环中的异步等待。

相关内容

  • 没有找到相关文章

最新更新