在等待特定条件时,由WebDriver刷新网页

我正在寻找更优雅的方式来刷新网页在testing(我使用Selenium2)。 我只是发送F5键,但不知道驱动程序是否有刷新整个网页的方法这是我的代码

while(driver.findElements(By.xpath("//*[text() = 'READY']")).size() == 0 ) driver.findElement(By.xpath("//body")).sendKeys(Keys.F5); //element appear after text READY is presented driver.findElement(By.cssSelector("div.column a")).click(); 

也许是在手动刷新页面上查找元素的一些更好的解决scheme

在Java或JavaScript中:

 driver.navigate().refresh(); 

这应该刷新页面。

在Python中有这样做的方法: driver.refresh() 。 在Java中可能不一样。

或者,你可以driver.get("http://foo.bar"); ,虽然我认为刷新方法应该工作得很好。

在python中

使用内置的方法

 driver.refresh() 

或者,执行JavaScript

 driver.execute_script("location.reload()") 

find各种方法来刷新selenium申请: –

 1.driver.navigate().refresh(); 2.driver.get(driver.getCurrentUrl()); 3.driver.navigate().to(driver.getCurrentUrl()); 4.driver.findElement(By.id("Contact-us")).sendKeys(Keys.F5); 5.driver.executeScript("history.go(0)"); 

有关实时代码,请参阅http://www.ufthelp.com/2014/11/Methods-Browser-Refresh-Selenium.html

这里是略有不同的C#版本:

 driver.Navigate().Refresh(); 

备用页面刷新(F5)

 driver.navigate().refresh(); 

(要么)

 Actions actions = new Actions(driver); actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform(); 

使用Selenium Webdriver刷新网页的5种不同的方法

没有特别的额外编码。 我只是用不同的方式使用现有的function来实现它的function。 他们来了 :

  1. 使用sendKeys.Keys方法

     driver.get("https://accounts.google.com/SignUp"); driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5); 
  2. 使用navigate.refresh()方法

     driver.get("https://accounts.google.com/SignUp"); driver.navigate().refresh(); 
  3. 使用navigate.to()方法

     driver.get("https://accounts.google.com/SignUp"); driver.navigate().to(driver.getCurrentUrl()); 
  4. 使用get()方法

     driver.get("https://accounts.google.com/SignUp"); driver.get(driver.getCurrentUrl()); 
  5. 使用sendKeys()方法

     driver.get("https://accounts.google.com/SignUp"); driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035"); 

你也可以试试

 Driver.Instance.Navigate().Refresh(); 

还有一种情况是,您只需要刷新页面上的特定iframe,而不是整个页面。

你做如下:

 public void refreshIFrameByJavaScriptExecutor(String iFrameId){ String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src"; ((IJavaScriptExecutor)WebDriver).ExecuteScript(script); } 

需要注意的一点是,driver.navigate()。refresh()调用有时似乎是asynchronous的,这意味着它不会等待刷新结束,它只是“启动刷新”,不会阻止进一步的执行而浏览器正在重新加载页面。

虽然这似乎只发生在less数情况下,但我们认为最好通过手动检查页面是否真正开始重新加载来确保这项工作达到100%。

以下是我在基页对象类中为此编写的代码:

 public void reload() { // remember reference to current html root element final WebElement htmlRoot = getDriver().findElement(By.tagName("html")); // the refresh seems to sometimes be asynchronous, so this sometimes just kicks off the refresh, // but doesn't actually wait for the fresh to finish getDriver().navigate().refresh(); // verify page started reloading by checking that the html root is not present anymore final long startTime = System.currentTimeMillis(); final long maxLoadTime = TimeUnit.SECONDS.toMillis(getMaximumLoadTime()); boolean startedReloading = false; do { try { startedReloading = !htmlRoot.isDisplayed(); } catch (ElementNotVisibleException | StaleElementReferenceException ex) { startedReloading = true; } } while (!startedReloading && (System.currentTimeMillis() - startTime < maxLoadTime)); if (!startedReloading) { throw new IllegalStateException("Page " + getName() + " did not start reloading in " + maxLoadTime + "ms"); } // verify page finished reloading verify(); } 

一些说明:

  • 既然你正在重新加载页面,你不能只检查给定元素的存在,因为元素将在重载开始之前以及在完成之后在那里存在。 所以有时你可能会变成真的,但是页面甚至没有开始加载。
  • 当页面重新加载时,检查WebElement.isDisplayed()将会抛出一个StaleElementReferenceExceptionexception。 其余的只是为了覆盖所有的基地
  • getName():获取页面名称的内部方法
  • getMaximumLoadTime():返回页面应该允许在几秒钟内加载多长时间的内部方法
  • verify():内部方法确保页面实际加载

同样,绝大多数情况下,do / while循环只运行一次,因为浏览器().super()之外的代码在浏览器完全重新加载页面之前不会被执行,但是我们已经看到了一些情况实际上需要几秒钟的时间来完成这个循环,因为navigate()。refresh()在浏览器加载完成之前不会被阻塞。

另一种使用Java中的selenium来刷新当前页面的方法。

 //first: get the current URL in a String variable String currentURL = driver.getCurrentUrl(); //second: call the current URL driver.get(currentURL); 

使用这个将刷新当前页面,如点击浏览器的地址栏并按回车。

在PHP中:

 $driver->navigate()->refresh();