Actualisation de la page web par WebDriver en attendant une condition spécifique
Je cherche un moyen plus élégant d'actualiser la 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 rafraîchir toute la page Web 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();
Est peut-être une meilleure solution pour trouver l'élément sur la page actualisée manuellement
12 réponses
En Java ou JavaScript:
driver.navigate().refresh();
Cela devrait actualiser la page.
En Python, il existe une méthode pour faire ceci: driver.refresh()
. Ce n'est peut-être pas la même chose en Java.
Vous pouvez driver.get("http://foo.bar");
, bien que je pense de la méthode d'actualisation devrait fonctionner parfaitement.
En python
En utilisant la méthode intégrée
driver.refresh()
Ou, en exécutant JavaScript
driver.execute_script("location.reload()")
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 référer au lien http://www.ufthelp.com/2014/11/Methods-Browser-Refresh-Selenium.html
5 différentes façons d'actualiser une page Web à L'aide de 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 le faire fonctionner. Les voici:
-
En utilisant sendKeys.Clés méthode
driver.get("https://accounts.google.com/SignUp"); driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5);
-
En utilisant naviguer.refresh() méthode
driver.get("https://accounts.google.com/SignUp"); driver.navigate().refresh();
-
En utilisant navigate.to () méthode
driver.get("https://accounts.google.com/SignUp"); driver.navigate().to(driver.getCurrentUrl());
-
En utilisant get () méthode
driver.get("https://accounts.google.com/SignUp"); driver.get(driver.getCurrentUrl());
-
En utilisant SendKeys () méthode
driver.get("https://accounts.google.com/SignUp"); driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035");
Voici la version c# légèrement différente:
driver.Navigate().Refresh();
Autre option pour actualisation de la Page (F5)
driver.navigate().refresh();
(ou)
Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
Vous pouvez également essayer
Driver.Instance.Navigate().Refresh();
Une chose importante à noter est que le pilote.naviguer().l'appel refresh () semble parfois être asynchrone, ce qui signifie qu'il n'attend pas la fin de l'actualisation, il "lance l'actualisation" et ne bloque pas l'exécution pendant que le navigateur recharge la page.
Bien que cela ne semble se produire que dans une minorité de cas, nous avons pensé qu'il est préférable de s'assurer que cela fonctionne à 100% en ajoutant une vérification manuelle si la page a vraiment commencé à recharger.
Voici le code I écrit pour cela dans notre classe d'objets de page de base:
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 remarques:
- puisque vous rechargez la page, vous ne pouvez pas simplement vérifier l'existence d'un élément donné, car l'élément sera là avant le début du rechargement et après qu'il soit fait. Donc, parfois, vous pourriez obtenir vrai, mais la page n'a même pas commencé à charger encore.
- lorsque la page se recharge, Vérifiez WebElement.isDisplayed() lancera une exception StaleElementReferenceException. Le reste est juste pour couvrir tous bases
- getName (): méthode interne qui obtient le nom de la page
- getMaximumLoadTime (): méthode interne qui renvoie la durée de chargement de la page en secondes
- verify (): la méthode interne s'assure que la page est réellement chargée
Encore une fois, dans la grande majorité des cas, la boucle do/while s'exécute une seule fois car le code au-delà de navigate().refresh () n'est pas exécuté tant que le navigateur n'a pas complètement rechargé la page, mais nous avons vu des cas où il faut réellement des secondes pour passer à travers cette boucle parce que le navigate ().refresh () n'a pas bloqué jusqu'à ce que le navigateur ait terminé le chargement.
Il y a aussi un cas où vous voulez actualiser uniquement iframe spécifique sur la page et non la page complète.
Vous faites comme suit:
public void refreshIFrameByJavaScriptExecutor(String iFrameId){
String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}
Une autre façon d'actualiser la page actuelle 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);
L'utilisation de ceci rafraîchira la page en cours comme en cliquant sur la barre d'adresse du navigateur et en appuyant sur Entrée.