如何在 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'
            }
        );
    }
}

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