Selenium WebDriver显式等待间歇性不工作

Selenium WebDriver显式等待间歇性不工作,selenium,selenium-webdriver,webdriver,Selenium,Selenium Webdriver,Webdriver,大家好, 在这个方法上我需要你的帮助。我有一个网页,当页面加载时会有一个加载屏幕UI,我正在等待它完成,然后单击按钮 这是我的密码: @Step("Go to Audit Inquiry Screen") public void launchAuditInquiry(){ WebDriver webDriver = Driver.webDriver; WebDriverWait wait = new WebDriverWait(webDriver, 10); wait.

大家好,

在这个方法上我需要你的帮助。我有一个网页,当页面加载时会有一个加载屏幕UI,我正在等待它完成,然后单击按钮

这是我的密码:

@Step("Go to Audit Inquiry Screen")
public void launchAuditInquiry(){
    WebDriver webDriver = Driver.webDriver;
    WebDriverWait wait = new WebDriverWait(webDriver, 10);

    wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className("loading-container")));

    WebElement auditInquiryBtn = webDriver.findElement(By.linkText("Audit Inquiry"));
    auditInquiryBtn.click();
}
我的问题是,有时候,这段代码工作得很好。它将等待加载的ui div不可见,然后单击按钮。但有时会产生这样的错误:

Error Message: org.openqa.selenium.WebDriverException: unknown error: Element <a class="module-item" href="/audit/inquiry">...</a> is not clickable at point (822, 436). Other element would receive the click: <div class="loading-container" style="display: flex; opacity: 0.899842;">...</div>
但它有时会产生与上述相同的错误,有时也会正常工作


我只是对如何解决这个问题感到困惑。

首先要尝试的是删除InvisibilityFelementLocatedWait,然后使用ElementToClickable。我从未真正相信Selenium所认为的“可见”和“不可见”

我曾经遇到过这样的问题:要单击的元素完全脱离屏幕,因此Selenium会自动滚动,直到在视口中考虑它。但是由于有一个浮动的页脚,它没有足够的滚动,仍然在页脚后面,所以无法点击。它仍然被视为“可见”,因为它位于视口中

但是,如果确定,可以尝试在坐标而不是元素处强制单击

new Actions(driver).moveToElement(auditInquiryBtn).click().perform();

感谢大家的评论,特别是:

这是有帮助的,但有些项目,我已经尝试过,但没有工作。我检查的部分是其中的一项,也是此处的一条注释,用于强制单击:

new Actions(driver).moveToElement(auditInquiryBtn).click().perform();
但我对此有第二个想法,因为可能会发生这样的情况:当装载容器div仍然覆盖页面时,我强制单击submit按钮,它还会生成另一个装载容器div,并且我不确定如果存在两个装载容器div,会发生什么

现在,我的解决方案是调整等待功能的睡眠计时器:

WebDriverWait wait = new WebDriverWait(webDriver, 10, 2500L);
它现在可以工作了,因为它在第一次检查wait之前为loader div提供了生成的时间。加载程序渲染500毫秒有点快。我仍在测试这个,但如果它不起作用,我可能会做上面的解决方案


再次感谢。

问题的可能重复之处不是元素不存在。问题是另一个元素,
位于该元素的顶部,因此Selenium不会单击它。这里的修复方法是在尝试单击所需元素之前,先等待加载容器可见,然后再不可见。如果我猜的话,有一些装载。。。加载页面或页面的一部分时出现的弹出窗口。这在python中解决了同样的问题。谢谢
WebDriverWait wait = new WebDriverWait(webDriver, 10, 2500L);