【问题标题】:'Expect' function with wait parameter in WebdriverIO does not workWebdriverIO 中带有等待参数的“期望”函数不起作用
【发布时间】:2020-12-29 19:27:18
【问题描述】:

我是 webdriverio 的新手,目前遇到了问题。我需要在 Java 中实现类似等待性的东西 - 让 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');
});

【问题讨论】:

  • 它应该可以工作,但不适用于所有断言。你能提供一个不适合你的例子吗?我会试着解释为什么
  • @Andrei 这只是一些使用 .toBe('some string') 匹配器的简单期望。我在问题中添加了详细信息

标签: typescript webdriver-io


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,帮了我很多忙!一旦我更改了期望逻辑,现在就可以正常工作了。谢谢,祝您新年快乐!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 2017-06-09
  • 2019-03-10
  • 2020-10-15
  • 2020-10-13
相关资源
最近更新 更多