Je recherche un moyen plus élégant d'actualiser une page Web pendant les tests (j'utilise Selenium2). Je viens d'envoyer la clé F5 mais je me demande si le pilote a une méthode pour actualiser la page Web entière Voici mon code
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();
Peut-être est une meilleure solution pour trouver des éléments sur une page actualisée manuellement
Dans Java ou JavaScript:
driver.navigate().refresh();
Cela devrait actualiser la page.
Dans Python, il existe une méthode pour cela: driver.refresh()
. Ce n'est peut-être pas la même chose en Java.
Vous pouvez également utiliser driver.get("http://foo.bar");
, bien que je pense que la méthode de rafraîchissement devrait fonctionner correctement.
En python
Utilisation de la méthode intégrée
driver.refresh()
ou, en exécutant JavaScript
driver.execute_script("location.reload()")
5 manières différentes d’actualiser une page Web en utilisant Selenium Webdriver
Il n'y a pas de codage supplémentaire spécial. Je viens d'utiliser les fonctions existantes de différentes manières pour que cela fonctionne. Les voici :
Utilisation de la méthode sendKeys.Keys
driver.get("https://accounts.google.com/SignUp");
driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5);
Utilisation de la méthode browse.refresh ()
driver.get("https://accounts.google.com/SignUp");
driver.navigate().refresh();
Utilisation de la méthode browse.to ()
driver.get("https://accounts.google.com/SignUp");
driver.navigate().to(driver.getCurrentUrl());
Utiliser la méthode get ()
driver.get("https://accounts.google.com/SignUp");
driver.get(driver.getCurrentUrl());
Utilisation de la méthode sendKeys ()
driver.get("https://accounts.google.com/SignUp");
driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035");
Trouvé différentes approches pour actualiser l'application dans 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)");
Pour le code en direct, veuillez vous reporter au lien http://www.ufthelp.com/2014/11/Methods-Browser-Refresh-Selenium.html
Voici la version légèrement différente de C #:
driver.Navigate().Refresh();
Alternative pour Actualisation de la page (F5)
driver.navigate().refresh();
(ou)
Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
Une chose importante à noter est que l'appel driver.navigate (). Refresh () semble parfois être asynchrone, ce qui signifie qu'il n'attend pas la fin de l'actualisation, il "déclenche simplement l'actualisation" et ne bloque pas l'exécution ultérieure. pendant que le navigateur recharge la page.
Bien que cela ne semble se produire que dans une minorité de cas, nous avons estimé qu'il était préférable de s'assurer que cela fonctionne à 100% en ajoutant un contrôle manuel pour savoir si la page a réellement commencé à être rechargée.
Voici le code que j'ai écrit pour cela dans notre classe d'objet page page:
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();
}
Quelques notes:
Encore une fois, dans une grande majorité des cas, la boucle do/while s'exécute une seule fois, car le code au-delà de browse (). Refresh () n'est exécuté que lorsque le navigateur a rechargé la page complètement, mais nous avons déjà vu des cas où cela prend en fait quelques secondes pour passer à travers cette boucle car la fonction browse (). refresh () ne s'est pas bloquée jusqu'à ce que le navigateur ait fini de se charger.
Vous pouvez aussi essayer
Driver.Instance.Navigate().Refresh();
Il existe également un cas où vous souhaitez actualiser uniquement l'iframe spécifique sur la page et non la page entière.
Vous faites est comme suit:
public void refreshIFrameByJavaScriptExecutor(String iFrameId){
String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}
En PHP:
$driver->navigate()->refresh();
ne autre façon d'actualiser la page en cours en utilisant Selenium en Java.
//first: get the current URL in a String variable
String currentURL = driver.getCurrentUrl();
//second: call the current URL
driver.get(currentURL);
En utilisant ceci, vous actualiserez la page actuelle, comme en cliquant sur la barre d'adresse du navigateur et en appuyant sur Entrée.