Webdriver IO加载叠加可防止单击

时间:2017-06-20 13:25:03

标签: javascript selenium webdriver-io

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

焦点不会丢失......但是我有覆盖问题......

任何想法?

2 个答案:

答案 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();
});

这很糟糕,但它完成了工作。