【问题标题】:How to wait after browser.keys() in WebdriverIO async mode?如何在 WebdriverIO 异步模式下等待 browser.keys()?
【发布时间】:2021-10-27 19:19:29
【问题描述】:

我正在努力使用异步 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() 进行比较,但它仍然不起作用

【问题讨论】:

    标签: javascript asynchronous webdriver-io


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 2019-02-16
      • 2020-10-15
      • 1970-01-01
      • 2016-04-26
      相关资源
      最近更新 更多