Actualiser la page en utilisant Selenium Pilote Web

⚡ Résumé intelligent

Actualiser une page dans Selenium WebDriver recharge la version actuelle URL de sorte que chaque élément soit rendu avant l'exécution des assertions, et le framework propose cinq commandes distinctes qui permettent d'obtenir le même rechargement de différentes manières.

  • (I.e. Choix par défaut : driver.navigate().refresh() est la fonction de rechargement intégrée qui ne prend aucun argument et ne renvoie aucune valeur.
  • ☑️ Variantes récursives : Passer getCurrentUrl() dans get() ou navigate().to() recharge la même adresse.
  • Itinéraire clavier : sendKeys accepte Keys.F5 ou la valeur Unicode \uE035, mais elle doit cibler un élément réel.
  • 🧪 Itinéraire du script : JavascriptL'exécuteur qui lance location.reload() fonctionne même lorsque la commande WebDriver est bloquée.
  • Après le rechargement : Chaque référence à un élément capturée précédemment devient obsolète et doit être localisée à nouveau.
  • (I.e. Configuration moderne : Selenium Le gestionnaire est apparu dans la version 4.6, il n'est donc plus nécessaire de définir manuellement le chemin du pilote.

Actualiser la page à l'aide de Selenium Commandes WebDriver

Lors de l'automatisation des tests d'une application web, il est parfois nécessaire d'actualiser la page plusieurs fois pour que tous les éléments web soient entièrement chargés. Au premier chargement, certains éléments peuvent être chargés, tandis qu'une seconde actualisation est nécessaire pour que tous apparaissent. Ceci peut être réalisé à l'aide de la commande d'actualisation fournie par Selenium Pilote Web.

Comment actualiser la page dans Selenium

L'opération d'actualisation du navigateur peut être effectuée de la manière suivante Selenium. Nous discuterons en détail des méthodes mentionnées ci-dessous tout au long de l’article.

  1. commande driver.navigate().refresh()
  2. Méthode Get
  3. Commande Envoyer les clés
  4. Méthode de navigation
  5. commande driver.navigate().to()

1) Commande driver.navigate().refresh()

Il s'agit de la méthode intégrée pour effectuer une opération d'actualisation de page fournie par Selenium WebDriver. Cette commande est la plus couramment utilisée dans l'automatisation des tests pour effectuer une actualisation de page. La commande d'actualisation peut être utilisée simplement, comme indiqué ci-dessous.

driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();

L'interface Navigation permet d'effectuer diverses opérations du navigateur, comme la navigation vers la page précédente ou suivante, l'actualisation de la page et la fermeture du navigateur. Les méthodes de l'interface Navigation sont accessibles via la commande `driver.navigate()`. La méthode `refresh` de l'interface Navigation ne prend aucun argument et ne renvoie aucune valeur.

Exemple :

Scénario de test:

  1. Ouvrez le navigateur Chrome avec la page Web https://demo.guru99.com/selenium/guru99home/
  2. Une fois la page chargée avec succès, actualisez-la à l'aide de la méthode driver.navigate().refresh().
  3. Fermez le navigateur à l'aide de la méthode driver.close()

Code

package Guru99Demo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class RefreshDemo {
public static void main(String args[]) throws InterruptedException
{
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.manage().window().maximize();
driver.navigate().refresh();
driver.close();
}
}

⚠️ Note de version : Selenium Gestionnaire livré avec Selenium 4.6 et télécharge automatiquement le pilote de navigateur correspondant, la ligne System.setProperty ci-dessus n'est donc plus nécessaire sur une version actuelle. new ChromeDriver() Cela suffit. La phrase originale est conservée car elle reste correcte pour le Selenium 3 configurations de style ont servi de base à l'exemple écrit.

Code Sortie :

Au chargement initial, la page d'accueil de démonstration s'affiche comme indiqué ci-dessous.

Guru99 pages d'accueil de démonstration lors du chargement initial avant l'exécution de la commande d'actualisation

Après l'actualisation de la page, la vidéo affichée a changé, ce qui confirme que le rechargement a bien eu lieu.

Guru99 pages d'accueil de démonstration après l'actualisation du pilote (driver.navigate().refresh()) affichant une vidéo différente

Plusieurs autres façons d'actualiser une page

La méthode d'actualisation n'est pas la seule façon de recharger une application. Les quatre techniques ci-dessous produisent le même résultat et il est utile de les connaître, car une application verrouillée ou un navigateur récalcitrant peuvent parfois en bloquer une.

2) Méthode Get

La méthode `get` peut être utilisée de manière récursive pour actualiser une page. Pour ce faire, il faut lui passer une autre méthode en argument.

Exemple :

driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());

3) Méthode de navigation

Cette méthode utilise le même concept de récursivité que celui mentionné précédemment. La méthode `getCurrentUrl()` est passée comme argument à la méthode `driver.navigate().to()`.

Exemple :

driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());

4) Méthode d'envoi de touches à l'aide de la touche F5

Il s'agit de la deuxième méthode la plus couramment utilisée pour actualiser une page dans SeleniumCette méthode prend la touche d'actualisation (F5) comme argument. Comme sendKeys fonctionne uniquement sur les éléments web et non sur le navigateur, il est nécessaire d'identifier au préalable un élément web valide sur la page web avant d'utiliser la méthode sendKeys. La procédure est illustrée ci-dessous.

Exemple :

driver.get("https://www.guru99.com");
driver.findElement(By.id("username")).sendKeys(Keys.F5);

Étant donné que la frappe au clavier est transmise à un élément plutôt qu'à l'interface du navigateur, ce chemin dépend de l'élément qui détient le focus. Si le localisateur Si la touche correspond à un champ qui ne peut pas recevoir le focus, elle est ignorée et la page ne se recharge jamais.

5) Méthode d'envoi de clés utilisant l'ASCII Code

Cette méthode utilise le même principe que la précédente, mais au lieu de transmettre la touche F5 comme argument, elle transmet le point de code de la touche d'actualisation. Voici comment procéder :

driver.get("https://www.guru99.com");
driver.findElement(By.id("username")).sendKeys("\uE035");

La valeur \uE035 est le point de code Unicode WebDriver que le protocole associe à F5, donc cet extrait et le précédent sont équivalents.

Comment actualiser une page à l'aide de JavaExécuteur de script

Chaque navigateur expose une fonction de rechargement aux scripts de page, et Selenium peut l'appeler via le JavascriptInterface d'exécution. Il s'agit du comportement par défaut lorsque la commande d'actualisation WebDriver est interceptée par l'application ou par une extension de navigateur.

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");

Deux variantes sont à retenir :

  1. emplacement.recharger() effectue un rechargement normal et peut servir la page à partir du cache.
  2. histoire.go(0) est un équivalent plus ancien que certaines suites logicielles héritées utilisent encore.

La route d'exécution s'exécute à l'intérieur de la page ; elle n'attend donc pas automatiquement le nouveau document. Faites-la suivre d'une attente explicite, exactement comme vous le feriez après `driver.navigate().refresh()`, et n'oubliez pas qu'un rechargement piloté par script ne fermera pas la boîte de dialogue du navigateur. Si l'application testée charge son contenu de manière asynchrone, les mêmes précautions s'appliquent. gestion des appels AJAX dans Selenium pilote web.

Comment éviter l'exception StaleElementReferenceException après une actualisation

Une actualisation détruit le DOM actuel et en crée un nouveau. Chaque élément WebElement capturé avant le rechargement pointe désormais vers un nœud inexistant ; par conséquent, tout appel ultérieur à cet élément lève une exception StaleElementReferenceException. Il s'agit de l'erreur la plus fréquente suite à une actualisation de page.

Trois habitudes permettent d'éviter presque tous ces échecs :

  1. Localisez après, jamais avant. Stockez le localisateur By plutôt que l'élément WebElement, et appelez à nouveau findElement une fois le rechargement terminé.
  2. Attendez un vrai signal. Attendre explicitement la visibilité d'un élément qui n'existe qu'après le rechargement est bien plus fiable qu'une pause fixe.
  3. Actualisez la page, puis relisez. Ne jamais inclure une valeur textuelle ou un attribut capturé avant le rechargement dans une assertion effectuée après celui-ci.

Le modèle ci-dessous s'applique aux trois :

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
driver.navigate().refresh();
WebElement search = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("username")));
search.sendKeys("guru99");

WebDriverWait prend une durée en Selenium 4, ce qui constitue un changement par rapport au constructeur de secondes entières utilisé dans Selenium 3. Des techniques plus générales pour ces défaillances sont présentées dans notre guide. gestion des exceptions dans Selenium.

Comparaison de Selenium Méthodes d'actualisation de page

Les six commandes rechargent la page, mais elles diffèrent par leurs dépendances et par la manière dont elles échouent.

Méthode Dépend de Rechargement via Quand c'est le bon choix
pilote.navigate().refresh() Rien de plus La commande de rechargement du navigateur Presque toujours — la valeur par défaut
pilote.get(pilote.getCurrentUrl()) Un courant lisible URL Une navigation renouvelée Lorsque vous souhaitez également supprimer l'entrée d'historique
pilote.navigate().to(pilote.getCurrentUrl()) Un courant lisible URL Une navigation renouvelée Idem ci-dessus, écrit via l'interface de navigation
envoyerTouches(Touches.F5) Un élément focalisable Une touche Lorsque vous testez délibérément le chemin du clavier
envoyerKeys("\uE035") Un élément focalisable Une touche Identique à F5, écrit sous forme de point de code
JavascriptExécuteur location.recharger() Scripting activé Un script de page Lorsque la commande WebDriver est bloquée

Commencez par la commande d'actualisation et ne passez à une autre ligne que si l'opération échoue pour une raison que vous comprenez. Le même ordre de préférence s'applique lorsque vous agrandir ou redimensionner la fenêtre du navigateur: privilégier l'appel WebDriver natif et considérer la route du script comme solution de repli.

FAQ

C'est possible. Si la page actuelle a été générée par une requête POST, le navigateur peut demander à renvoyer les données, et le rechargement est alors bloqué par l'affichage de cette boîte de dialogue. Naviguer vers la page URL L'utilisation de get() permet également d'éviter complètement l'invite de commande.

Les noms des liaisons diffèrent, mais la commande est la même : driver.refresh() dans Python, driver.Navigate().Refresh() en C# et driver.navigate().refresh() en JavaTous trois émettent la même instruction WebDriver.

Non. Un rechargement conserve les cookies, le stockage de session et le stockage local de la même origine ; c’est pourquoi actualiser la page est une mauvaise solution pour réinitialiser l’état du navigateur. Supprimez explicitement les cookies ou ouvrez une nouvelle session de navigation.

Les moteurs d'auto-réparation résolvent à nouveau un localisateur à partir de plusieurs attributs lorsque le DOM rechargé ne correspond plus, et les modèles d'analyse des défaillances regroupent les anomalies de temps de rechargement afin que l'équipe corrige une seule attente plutôt que cinquante tests.

Oui, et l'appel de rafraîchissement en une seule ligne est une suggestion qui fonctionne systématiquement. C'est l'attente qui suit qui pose problème ; il faut donc vérifier que le délai d'expiration généré correspond bien au temps de chargement réel de l'application.

Il n'existe pas de commande dédiée. Les équipes contournent ce problème en envoyant simultanément les touches Ctrl et F5 via la classe Actions, ou en désactivant le cache via les options du navigateur, ce qui est la méthode la plus fiable.

La commande d'actualisation ne fonctionne pas, car elle recharge systématiquement le document principal. Il faut plutôt basculer vers le cadre et le recharger à l'aide d'un script, ou réinitialiser son attribut source, puis revenir au contenu par défaut.

N'utilisez pas de durée d'attente fixe. Prévoyez une attente explicite de dix à trente secondes, conditionnée par une condition qui n'est vraie qu'après le rechargement de la page, afin que le test reprenne dès que celle-ci est prête.

Résumez cet article avec :