2

我有一个场景,我想继续刷新页面,直到页面中出现一些元素。任何人都可以帮助我吗?

我正在使用下面的代码,但页面在五秒后没有刷新

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
               .withTimeout(30, TimeUnit.SECONDS)
               .pollingEvery(5, TimeUnit.SECONDS)
               .ignoring(NoSuchElementException.class);

           WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
             public WebElement apply(WebDriver driver) {
               return driver.findElement(locator);
             }
           });

谢谢

苏丹苏

4

3 回答 3

5

尝试使用FluentWait类。

   // Waiting 30 seconds for an element to be present on the page, checking
   // for its presence once every 5 seconds.
   Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
       .withTimeout(30, SECONDS)
       .pollingEvery(5, SECONDS)
       .ignoring(NoSuchElementException.class);

   WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
     public WebElement apply(WebDriver driver) {
       return driver.findElement(By.id("foo"));
     }
   });

这样,Selenium 将等待一段时间,直到某些元素被加载。

我希望这能解决您的问题,因此您不必刷新页面。

编辑:

正如MrTi如此友好地指出的那样,上面的代码不会刷新你的页面。它只会等待一段时间,直到某些元素被加载。我只是认为它可能会解决问题,而无需刷新页面。如果这不能解决您的问题,并且您仍然需要刷新页面,那么您需要driver.navigate().refresh()在返回之前添加,如下所示:

   // Waiting 30 seconds for an element to be present on the page, checking
   // for its presence once every 5 seconds.
   Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
       .withTimeout(30, SECONDS)
       .pollingEvery(5, SECONDS)
       .ignoring(NoSuchElementException.class);

   WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
     public WebElement apply(WebDriver driver) {
       driver.navigate().refresh()
       return driver.findElement(By.id("foo"));
     }
   });
于 2013-10-26T08:23:20.317 回答
1

感谢 EmilC 的提议。

也可以通过以下方式使用 java lambda 的语法声明函数。

    Wait<WebDriver> wait = new FluentWait<WebDriver>(ctx.driver)
            .withTimeout(30, TimeUnit.SECONDS)
            .pollingEvery(5, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class);

    wait.until((webDriver) -> {
        webDriver.navigate().refresh();
        return driver.findElement(by);
    });
于 2016-03-09T14:57:52.950 回答
-2

if $all_loaded = true > do something > else > refresh page

于 2013-10-26T07:34:40.753 回答