167

我正在寻找更优雅的方式在测试期间刷新网页(我使用 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();    

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

4

13 回答 13

319

在 Java 或 JavaScript 中:

driver.navigate().refresh();

这应该刷新页面。

于 2012-04-20T21:31:47.400 回答
86

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

或者,您可以driver.get("http://foo.bar");,尽管我认为刷新方法应该可以正常工作。

于 2012-04-20T13:44:44.527 回答
62

在蟒蛇

使用内置方法

driver.refresh()

或者,执行 JavaScript

driver.execute_script("location.reload()")
于 2014-02-12T11:37:48.170 回答
29

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

没有特殊的额外编码。我刚刚以不同的方式使用了现有的功能来让它工作。他们来了 :

  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");
    
于 2016-12-02T18:49:20.570 回答
21

找到了各种方法来刷新 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

于 2014-11-13T09:45:01.297 回答
12

这是稍微不同的 C# 版本:

driver.Navigate().Refresh();
于 2015-07-08T14:30:06.297 回答
8

替代页面刷新 (F5)

driver.navigate().refresh();

(或者)

Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
于 2013-09-04T12:39:52.673 回答
5

需要注意的一件重要事情是 driver.navigate().refresh() 调用有时似乎是异步的,这意味着它不会等待刷新完成,它只是“开始刷新”并且不会阻止进一步执行当浏览器重新加载页面时。

虽然这似乎只在少数情况下发生,但我们认为最好通过添加手动检查页面是否真的开始重新加载来确保其 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() 将抛出 StaleElementReferenceException。剩下的只是覆盖所有的基地
  • getName():获取页面名称的内部方法
  • getMaximumLoadTime():返回页面应该允许加载多长时间的内部方法(以秒为单位)
  • verify():内部方法确保页面实际加载

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

于 2016-06-09T20:33:21.747 回答
3

你也可以试试

Driver.Instance.Navigate().Refresh();
于 2015-09-10T09:39:45.863 回答
2

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

你这样做如下:

public void refreshIFrameByJavaScriptExecutor(String iFrameId){
        String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
       ((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}
于 2014-06-30T09:11:40.837 回答
2

在 PHP 中:

$driver->navigate()->refresh();
于 2016-06-15T16:07:09.263 回答
1

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

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

使用它会刷新当前页面,就像单击浏览器的地址栏并按回车一样。

于 2016-12-22T06:01:32.843 回答
1

R中,您可以使用 refresh 方法,但首先我们使用 navigate 方法导航到 url:

remDr$navigate("https://...")
remDr$refresh()
于 2019-11-01T03:40:57.130 回答