等待特定条件时通过 WebDriver 刷新网页

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

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

386394 次浏览

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

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

在 Java 或 JavaScript 中:

driver.navigate().refresh();

这应该会刷新页面。

替代 页面刷新(F5)

driver.navigate().refresh();

(或)

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

在巨蟒里

使用内置方法

driver.refresh()

或者,执行 JavaScript

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

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

你可以这样做:

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

发现了各种刷新 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();

你也可以试试

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

需要注意的一件重要事情是 driver.import ()。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.isDisplay ()会抛出一个 StaleElementReferenceException 异常
  • GetName () : 获取页面名称的内部方法
  • GetMaximumLoadTime () : 返回允许以秒为单位加载页面的时间长度的内部方法
  • Valid() : 内部方法确保页面实际加载

同样,在绝大多数情况下,do/while 循环只运行一次,因为其中的代码不包含导航()。Refresh ()在浏览器完全重新加载页面之前是不会执行的,但是我们已经看到过这样的情况,因为导航()需要几秒钟才能完成这个循环。Refresh ()在浏览器完成加载之前不会阻止。

在 PHP 中:

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

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

没有特殊的额外代码。我只是以不同的方式使用了现有的函数来使它工作。他们在这里:

  1. 使用 钥匙,钥匙方法

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

    driver.get("https://accounts.google.com/SignUp");
    driver.navigate().refresh();
    
  3. Using navigate.to() method

    driver.get("https://accounts.google.com/SignUp");
    driver.navigate().to(driver.getCurrentUrl());
    
  4. Using get() method

    driver.get("https://accounts.google.com/SignUp");
    driver.get(driver.getCurrentUrl());
    
  5. Using sendKeys() method

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

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

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

使用此选项可刷新当前页面,如单击浏览器的地址栏并按回车键。

R中,您可以使用刷新方法,但是首先,我们使用导航方法导航到一个 url:

remDr$navigate("https://...")
remDr$refresh()