在webdriver.io我试图关注元素,然后点击另一个元素
代码如下所示:
browser.moveToObject(focusSelector)
.click(clickSelector);
问题是焦点会在页面上带来加载覆盖,当我尝试单击某些时候叠加层正在接收点击,并且代码失败并出现此异常:
unknown error: Element <div data-bo="UserMenu">...</div> is not clickable at point (1203, 28).
Other element would receive the click: <div class="blockUI blockOverlay"></div>
所以我需要等待覆盖.blockUI将消失,然后才进行点击....
我曾尝试过:
browser.moveToObject(focusSelector);
browser.waitForExist('.blockUI', browser.options.waitforTimeout, true);
browser.click(clickSelector);
但是这不起作用,因为在moveToObject之后,焦点丢失并且没有显示点击选择器。
在:
browser.moveToObject(focusSelector)
.click(clickSelector);
焦点不会丢失......但是我有覆盖问题......
任何想法?
答案 0 :(得分:0)
此问题的回答是 in this SO post 。
这适用于我的Ajax Loader:"Loading image ID"
(加载图像的ID)可以通过Firebug检索。
By loadingImage = By.id("loading image ID");
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
wait.until(ExpectedConditions.invisibilityOfElementLocated(loadingImage));
答案 1 :(得分:0)
我会避免使用moveToObject()
,因为它很快就会被弃用。如果您绝对不能这样做,请尝试使用:
browser.waitForVisible('.blockUI', null, true);
在moveToObject()
命令之后。这将一直等到元素不再可见(null
表示它将等待您在配置文件中设置的默认毫秒数,而true
表示命令已反转 - 请在此处阅读更多内容:http://webdriver.io/api/utility/waitForVisible.html#Usage)。
上面提到的execute
选项如下所示:
browser.execute(() => {
document.querySelector('[data-bo="UserMenu"]').click();
});
这很糟糕,但它完成了工作。