WebdriverIO waitfor 方法无法按预期工作

WebdriverIO waitfor methods don't work as expected

我正在处理一组使用大量停顿的 webdriverIO 测试。为了使框架更健壮,我想摆脱停顿并引入 waitfor 语句

我浏览了一些演练,其中大部分建议如下:

var decrease = browser.$("//*[@id='somebutton");
decrease.waitForExist(5000)
decrease.click()

然而,这在 90% 的情况下都不起作用,返回错误消息:

无法使用给定的搜索参数(“//*[@id='somebutton'”)在页面上找到元素。 (与我完全删除等待时收到的消息几乎相同)

我尝试了 waitForExist 和 waitForVisible 都没有成功

我玩了一个but,发现下面的方法确实有效:

browser.$("//*[@id='somebutton").waitForVisible(5000);
browser.$("//*[@id='somebutton").click()

虽然我不喜欢这个解决方案,因为它需要复制定位器,这将使将来的支持更加困难。

谁能解释一下为什么第一个选项可能对我不起作用?

这应该可以解决问题:

var selector = "//*[@id='somebutton";
browser.waitForExist(selector, 5000);
browser.click(selector);

此外,api 文档中的示例显示它是这样完成的。请注意,他们省略了 browser. 部分。

var notification = $('.notification');
notification.waitForExist(5000);

也许这是你的问题?不过这两种方法都应该有效。

最后一件事,如果不是绝对必要,则不必为此元素使用 xpath。对于 id 使用 css 选择器更容易。

var decrease = $('#somebutton');