'Expect' WebdriverIO 中带等待参数的函数不起作用

'Expect' function with wait parameter in WebdriverIO does not work

我是 webdriverio 的新手,目前 运行 遇到了问题。我需要在 Java 中实现类似于 awaitility 的东西 - 让 expect() 函数在失败之前尝试使用轮询间隔一段时间来成功断言。我已经试过了https://webdriver.io/docs/api/expect-webdriverio.html,所以我设置了

    beforeSession: function (config, capabilities, specs) {
    require('expect-webdriverio').setOptions({ wait: 50000 })
},

在我的 wdio.conf.ts 中,但它对我不起作用。它似乎不等待超时,只是在我的 expect() 被调用后立即失败。你能告诉我我可能做错了什么吗?

更新: 我的期望:

it('should be able to save stuff', () => {
    expect(mainPage.getDataForRow('My row', 'My row')).toBe('Hello');
});

它适用于内置匹配器。例如 expect(elem).toHaveElementProperty('height', 23)expect(myInput).toHaveAttributeContaining('class', 'form')。这些高阶匹配器内部已经包含“轮询”逻辑。但是,在您的代码示例中,您在使用 mainPage.getDataForRow('My row', 'My row') 执行此行并尝试将其与 'Hello' 进行比较的确切时刻获取元素的值。正确的方法是使用开箱即用的正确匹配器,而不是“获取”方法。但是如果你的情况非常具体,你可以尝试自己实现具有轮询行为的助手。示例:

function expectToContainText(elem, text) {
  return borser.wait(() => element.getAttribute('innerText').then(innerText => innerText == text));
}