当前位置: 首页 > 知识库问答 >
问题:

当WebDriverWait或隐式Wait不起作用时,如何在Selenium WebDriver中等待

许照
2023-03-14
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 

但是这不起作用,正如bec所说的,驱动程序检测到web元素立即存在(并且可见和显示),但是单击不会起作用,除非我等待3秒钟。

同样,我不能使用:

    WebDriverWait wait = new WebDriverWait(driver, 30, 5000);

    wait.until(ExpectedConditions.elementToBeClickable(element));

出于同样的原因(这只在所述元素在3秒前不可点击/可见时才会起作用,但就WebDriver而言--它立即可见)

  <div class="a-popover-wrapper">
    <div class="a-popover-header">
    <button class=" a-button-close a-declarative" aria-label="Close" data-action="a-popover-close">
    <i class="a-icon a-icon-close"/>
    </button>
    <h4 id="a-popover-header-7" class="a-popover-header-content">Buy professional installation</h4>
    </div>
    <div id="a-popover-content-7" class="a-popover-inner pdp-service-modal-instance" style="height: auto; overflow-y: auto;">
    </div>
    <span class="a-popover-end a-popover-a11y-offscreen" tabindex="0"/>
  </div>

谢了!

共有1个答案

花飞扬
2023-03-14

你试过用FluentWait吗?尝试下面的代码,

Wait<WebDriver> wait = new FluentWait<WebDriver>(pDriver).withTimeout(100, TimeUnit.SECONDS).pollingEvery(600,TimeUnit.MILLISECONDS).ignoring(NoSuchElementException.class);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("selector"));

你可以用上面的情况或下面的情况,

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("selector")));

有关FluentWait的进一步参考,请参阅以下链接https://sqa.stackexchange.com/questions/12866/how-FluentWait-is-different-from-WebDriverWait

 类似资料:
  • 问题内容: 我正在学习Java Maven Selenium。我想要在Selenium中使用这样的东西。 打开网站(例如https://www.facebook.com) 单击登录的电子邮件字段 等待20秒 输入我的电子邮件 这是我的简单代码: 该代码不起作用。它只会打开Facebook,单击电子邮件字段并输入我的电子邮件ID,而不是等待10秒钟才输入我的电子邮件。 问题答案: 并且无法正常工作,

  • 问题内容: 这是我第一次使用selenium和无头浏览器,因为我想使用ajax技术来爬网某些网页。 效果很好,但是在某些情况下,加载整个页面会花费太多时间(尤其是当某些资源不可用时),因此我必须为selenium设置超时时间。 首先,我尝试了和,但是当我设置这些超时时,如果页面未完全加载,我将不会得到任何页面源,如下代码所示: 所以我尝试使用隐式等待和条件等待,如下所示: 这次我得到了想要的内容。

  • 问题内容: 我正在学习Java Maven Selenium。我希望在Selenium中使用。 打开网站(例如https://www.facebook.com) 单击登录的电子邮件字段 等待20秒 输入我的电子邮件 这是我的简单代码: 该代码不起作用。它只会打开Facebook,单击电子邮件字段并输入我的电子邮件ID,而不是等待10秒钟才输入我的电子邮件。 问题答案: 并且无法正常工作,他们将在指

  • 我正在尝试与selenium webDrive同步,但某些东西无法隐含地使用等待()。 我隐含理解的方式等待(...)是代码正在等待,直到元素在最大时间内可用。 以下代码因错误而崩溃: 系统。out ist打印:-- 我也用Geckodriver试过了,结果也一样。 我也增加了等待时间,但结果相同。 使其工作的唯一方法是使用Thread.sleep()(上面评论) 编辑请注意,我没有看到任何重复与

  • 伙计们,我已经开始工作的硒网络驱动程序。你可以假设我是个初学者。目前,我在代码(C#)中实现隐式wait命令时遇到了困难。它没有正常工作,并且由于没有找到元素而导致一个异常,但是当我添加“Thread.Sleep(3000)”时,代码得到了完美无缺的执行。我一直在互联网上寻找解决方案,但是无法解决问题。下面我提到了示例代码。 请注意,目前我不想使用显式等待,因为隐式将满足我的需要(如果它开始工作的

  • 问题内容: 我在用: 但是对于以下元素它仍然连续失败 我添加了等待代码: 隐式等待是否应该等到找到一个元素后再进行处理?如果我使用而不是我添加的代码,还会更好吗? 问题答案: TL; DR:始终使用显式等待。忘记隐式等待的存在。 以下是显式等待与隐式等待之间的区别的简要概述: 显式等待: 记录和定义的行为。 在硒的本地部分运行(以你的代码语言显示)。 可以在你能想到的任何条件下工作。 返回成功或超