继续刷新页面,直到出现某个元素?

时间:2013-10-30 05:57:26

标签: selenium

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

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

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

谢谢

Sudhansu

3 个答案:

答案 0 :(得分:2)

尝试使用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"));
     }
   });

答案 1 :(得分:0)

感谢EmilC提出的建议。

使用java lambda语法以下列方式声明函数也是可行的。

<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script>
<ul class="SortFilterMenu">
    <li><a id="RecommendedSort" data-value="Recommended" class="sortLabelElement sortTag sortClickedEvent" data-selected="selected">Our Recommendation</a></li>
    <li><a id="AnotherSort" data-value="AnotherOne" class="sortLabelElement sortTag sortClickedEvent">Something else</a></li>
    <li><a id="YetAnotherSort" data-value="YetAnotherOne" class="sortLabelElement sortTag sortClickedEvent">Something more</a></li>
</ul>

答案 2 :(得分:-2)

如果$ all_loaded = true&gt;做点什么&gt;否则&gt;刷新页面