gpt4 book ai didi

java - 使用 Selenium WebDriverWait 等待元素可单击不起作用

转载 作者:行者123 更新时间:2023-11-29 09:28:14 33 4
gpt4 key购买 nike

我想点击一个菜单项。

但是就在这次点击之前,在我的测试流程中,我打开了一个模态,这会阻止点击菜单项。此外,当关闭时,模态框会淡出而不是立即消失。

我所做的是关闭菜单项,然后等待菜单项可点击,然后再执行点击:

    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,以便在每次发生异常时截取屏幕截图,在屏幕截图中我可以清楚地看到模式正在淡出。所以它的关闭按钮已被单击,但此时我认为等待应该生效并暂停执行,直到模态完全消失并且可以单击菜单项。这不会发生。

现在我通常通过增加一点 sleep 时间来解决这个问题,因为模态淡出需要多长时间是完全可以预测的。不过,我真的很想找出一个更优雅的解决方案,它可以适用于所有情况。

我的理解是 elementToBeClickable 不考虑元素何时被另一个元素覆盖,我觉得这很愚蠢。有没有一种方法可以模拟这种等待 (notCoveredByOtherElement),因为这正是我所需要的?

附言我正在使用 Selenium 2.53。还没有尝试过 v3,尽管如果有人可以确认这个案例在这个新版本中得到了正确处理,我很乐意开始切换到它。

最佳答案

我也多次遇到这个问题,并尝试了一些对我一直有效的解决方案。

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

我已经在下面的链接中记录了所有内容,请检查

Solutions for Element is not clickable in Selenium

关于java - 使用 Selenium WebDriverWait 等待元素可单击不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39332426/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com