如何在 WebdriverIO 异步模式下等待 browser.keys()?
How to wait after browser.keys() in WebdriverIO async mode?
我正在努力使用异步 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'
}
);
}
}
我省略了屏蔽逻辑部分,因为这只是一个细节,这里重要的一点是循环内的异步等待。
我正在努力使用异步 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'
}
);
}
}
我省略了屏蔽逻辑部分,因为这只是一个细节,这里重要的一点是循环内的异步等待。