我想点击一个菜单项。
然而就在这次点击之前,在我的测试流程中,我有一个模态打开,这可以防止单击菜单项。此外,当关闭时,模态会褪色而不是立即消失。
我所做的是关闭菜单项,然后在执行点击之前等待菜单项可点击:
WebDriverWait wait = new WebDriverWait(getDriver(), time);
wait.withMessage(message);
try {
wait.until(ExpectedConditions.elementToBeClickable(locator));
} catch (Exception e) {
Logging.logException(e);
}
clickOn(locator);
但是这不起作用,因为我每次都在运行以下异常:
org.openqa.selenium.WebDriverException: unknown error: Element is not clickable at point (158, 565). Other element would receive the click: <div class="globalpopup with-data slideout">...</div>
我也有Selenium设置每次发生异常时截取屏幕截图,在屏幕截图中我可以清楚地看到模态正在逐渐淡出。 因此,单击它的关闭按钮,但此时我认为等待应该生效并暂停执行,直到模态完全消失并且可以单击菜单项。这不会发生。
现在我通常通过添加一点睡眠时间来解决这个问题,因为它可以预测模态淡出需要多长时间。但是我真的想找出一个更优雅的解决方案,它可以适用于所有情况。
我的理解是elementToBeClickable不考虑元素何时被另一个元素覆盖,我觉得很傻。有没有办法模拟这样的等待(notCoveredByOtherElement),因为它正是我需要的?
P.S。我正在使用Selenium 2.53。还没有尝试过v3,虽然如果有人能确认在这个新版本中正确处理了这个案例,我很乐意开始切换到它。
答案 0 :(得分:-1)
我也遇到过这个问题的时间,并尝试了一些对我有用的解决方案。
1 - 将Chrome驱动程序更新为最新的2.23
2 - 获取坐标,然后单击链接或按钮
3 - 尝试使用Y坐标
单击// Find an element
WebElement elementToClick = driver.findElement(By.xpath("Your xpath"));
// Scroll the browser to the element's Y position
((JavascriptExecutor)driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")");
// Click the element
elementToClick.click();
// Find an element
WebElement elementToClick = driver.findElement(By.xpath("Your xpath"));
// Scroll the browser to the element's Y position
((JavascriptExecutor)driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")");
// Click the element
elementToClick.click();
我已经记录了以下所有链接,请检查