如何在java中使用Web驱动程序等待进度条

如何在java中使用Web驱动程序等待进度条,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,行动: 若我点击任何链接,一旦页面完全加载,进度条就会显示出来,那个么进度条就隐藏了 疑问: 我们想自动执行上述操作,如何检查进度操作是否完成 下面是html代码 一旦我点击链接,html看起来像这样 <div id ="divProgress" class="progresswindow" style="display: block;"></div> <div id ="divProgress" class="progresswindow" style="dis

行动: 若我点击任何链接,一旦页面完全加载,进度条就会显示出来,那个么进度条就隐藏了

疑问: 我们想自动执行上述操作,如何检查进度操作是否完成

下面是html代码

一旦我点击链接,html看起来像这样

<div id ="divProgress" class="progresswindow" style="display: block;"></div>
<div id ="divProgress" class="progresswindow" style="display: none;"></div>

然后页面加载完成的html如下所示

<div id ="divProgress" class="progresswindow" style="display: block;"></div>
<div id ="divProgress" class="progresswindow" style="display: none;"></div>

那么我如何检查进度条是否完成,目前我使用的是Thread.sleep(),但有一段时间web驱动程序会引发异常

Other element would receive the click: <div id="divProgress" class="progresswindow" style="display: block;">...</div>
其他元素将收到单击:。。。

请提供一个建议,说明如何使用显式等待来处理此问题,而不是使用
Thread.sleep()
要等待任何条件,应使用和类

在您的情况下,您应该等到带有进度条的div变为不可见:

    long timeoutInSeconds = 30;
    new WebDriverWait(driver, timeoutInSeconds)
  .until(ExpectedConditions.invisibilityOfElementLocated(By.id("divProgress")));

正如您所发现的,
Thread.sleep()
太脆弱,无法在测试代码中安全使用-您应该一直等待可以检查的内容。作为奖励,您的测试可能会执行得更快

而不是
Thread.sleep()
要等待任何条件,应该使用和类

在您的情况下,您应该等到带有进度条的div变为不可见:

    long timeoutInSeconds = 30;
    new WebDriverWait(driver, timeoutInSeconds)
  .until(ExpectedConditions.invisibilityOfElementLocated(By.id("divProgress")));

正如您所发现的,
Thread.sleep()
太脆弱,无法在测试代码中安全使用-您应该一直等待可以检查的内容。作为奖励,您的测试可能会执行得更快

感谢@alb-i986,他提出的编辑极大地改进了帖子(我不知道内置的预期条件),但编辑被降级了。他们确实改进了帖子!不客气——感谢您接受我的建议:)感谢@alb-i986,他建议对文章进行编辑,大大改进了文章(我不知道内置的预期条件),但编辑的排名降低了。他们确实改进了帖子!不客气,谢谢你接受我的建议:)