2017-06-20 78 views
0

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> 

,所以我需要等待当O verlay .blockUI就会消失,然后才做点击....

我曾试图做的事:

browser.moveToObject(focusSelector); 
browser.waitForExist('.blockUI', browser.options.waitforTimeout, true); 
browser.click(clickSelector); 

但这不会moveToObject后工作原因,焦点将丢失,点击选择不显示。

而在:

browser.moveToObject(focusSelector) 
       .click(clickSelector); 

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

什么想法?

+0

不要使用'block ui'。 – evolutionxbox

+0

在这种情况下,您可以尝试使用JavaScript执行程序。 – Murthi

+0

我们需要使用block ui来进行E2E测试。 用java脚本执行程序试过..没有为我工作,你能举个例子吗? – OBender

回答

0

这个问题得到解答in this SO post

这适用于我的Ajax加载器:"Loading image ID"(加载图片的ID)可以通过Firebug检索。

By loadingImage = By.id("loading image ID"); 

WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds); 

wait.until(ExpectedConditions.invisibilityOfElementLocated(loadingImage)); 
+0

这就是我做的和它不工作的 browser.waitForExist('。blockUI',browser.options。waitforTimeout,true); – OBender

+0

谈论“黑暗中的一枪”......老兄,你事先看过他的问题吗?首先,让那个肮脏的Java离开这里:OP运行WebdriverIO(Selenium JavaScript绑定)。其次,你所关联的问题比生活更古老,大多数答案与他的情景无关。 – iamdanchiv

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

这是哈克,但它能够完成任务。