Attentes explicites dans le sélénium

Attentes explicites dans le sélénium
Selenium offre des attentes pour résoudre les problèmes de synchronisation. Dans cet article, nous discuterons de la méthode d'attente explicite. La méthode explicite maintient l'exécution de l'étape suivante jusqu'à ce qu'elle trouve l'élément dans une période spécifique donnée. Dans ce contenu, nous aurons un aperçu des attentes du sélénium et comprendrons les avantages de l'attente explicite. Cet article met en œuvre un exemple de base d'attentes explicites et utilise des blocs d'essai et de capture pour assister à l'exception.

Quelles sont les attentes dans le cadre du sélénium?

Les attentes de sélénium aident à résoudre les problèmes de synchronisation. La synchronisation est le processus de correspondance de la «vitesse de l'outil d'automatisation des tests» avec la vitesse du «site Web testé». Dans ce processus, le webdriver exécute une certaine tâche sur la page Web, mais le WebElement n'est pas chargé dans «Site Web testé». Dans cette situation, le webdriver lance une «nosuchelementExpection» ou «elementNotVisibleExpection». Il existe trois types de méthode d'attente qui sont fournies par le cadre du sélénium.

Attente implicite

Ce type d'attente s'applique à tous les éléments du site Web, c'est pourquoi il s'appelle une attente mondiale. La méthode implicitelywait () est utilisée pour l'appeler.

Attente explicite

C'est un type d'attente spécifique à WebElement. Il attend un certain temps pour charger l'élément spécifique avant de lancer une exception.

Attente courante

Il donne le maximum de temps pour trouver le WebElement.

Qu'est-ce qu'une attente explicite en sélénium?

Le type d'attente explicite est différent de l'attente implicite. Cette méthode d'attente tient un certain temps jusqu'à ce qu'une condition spécifique se produise avant de passer à la ligne de code suivante. Il est utile où certains éléments se chargent plus rapidement et certains éléments se chargent plus lentement. Par exemple: il y a deux ou trois éléments qui prennent de 20 à 30 secondes à charger sur la page Web. Ici, vous ne pouvez pas aller changer l'attente en fonction du temps maximum qui est pris par l'une des WebElements. C'est là que l'attente explicite joue son rôle. Explicit Wait spécifie l'attente de cet élément particulier sur la page Web. Vous pouvez spécifier pour attendre un élément particulier depuis longtemps; C'est là que nous utilisons l'attente explicite. La méthode WebDriverWait est utilisée pour appeler l'attente eexplicite.

Interface de sélénium WebBrowser

L'interface WebDriver permet l'implémentation du test d'automatisation. Le webdriver est utilisé pour contrôler et créer une interaction entre les outils d'automatisation du site Web et du sélénium comme trouver les éléments, naviguer dans les URL, obtenir des propriétés d'attribut, confirmant si le texte est là dans le WebElement, la recherche d'un élément, et plus.

Vous pouvez utiliser une variété de navigateurs Web, notamment Firefox, Safari et Chrome. Chaque type de navigateur a une classe spécifique pour ce type de navigateur tel que Firefoxdriver, Chromedriver, InternetExplorerDriver, etc. Tous les navigateurs peuvent être implémentés via la méthode WebDriver.

Voici la syntaxe pour l'utilisation de l'interface WebDriver:

à partir de Selenium Import WebDriver
pilote = webdriver.Chrome()
conducteur.get ('https: // www.eBay.com ')

Dans le morceau de code fourni, nous créons l'objet «pilote» du webdriver. Ici, nous utilisons le navigateur Chrome avec la méthode.Classe chrome (). Après cela, le navigateur lance et ouvre l'URL donnée.

Exemple 1:

Dans ce premier programme, un exemple d'attente explicite très basique est implémenté, ce qui est très utile pour les débutants et les développeurs expérimentés.

Il y a des scénarios où nous trouvons d'abord les «offres quotidiennes» et naviguons vers la page Daily Offres. Si la condition est vraie, imprimez la «condition vraie». Sinon, imprimez l'exception «False».

Tout d'abord, nous importons toutes les bibliothèques nécessaires de sélénium et de webbrowser. Pour utiliser l'attente explicite, importez les bibliothèques suivantes:

org d'importation.openqa.sélénium.soutien.ui.Conditions attendues;
org d'importation.openqa.sélénium.soutien.ui.WebDriverWait;

Nous fournissons le code complet dans ce qui suit:

package ui;
Importer Java.user.concurrent.TimeUnit;
org d'importation.openqa.sélénium.Par;
org d'importation.openqa.sélénium.WebElement;
org d'importation.openqa.sélénium.chrome.Chromedriver;
org d'importation.openqa.sélénium.soutien.ui.Conditions attendues;
org d'importation.openqa.sélénium.soutien.ui.WebDriverWait;
classe publique explicit_wait
public static void main (String [] args)
Système.SetProperty ("WebDriver.chrome.Conducteur "," C: \\ BrowserDrivers \\ ChromEdriver.exe");
Chromedriver Driver = new ChromEdriver ();
conducteur.gérer().fenêtre().maximiser();
conducteur.get ("https: // www.eBay.com / ");
WebDriverWait Wait = nouveau WebDriverWait (pilote, durée.des secondes (10));
essayer
Element WebElement = attendre.Jusqu'à (conditions attendues.Visibilité OFFELIMÉLÉE (par.linkText ("Daily Offres")));
élément.Cliquez sur();
Système.dehors.println ("Condition True");

Catch (exception e)

Système.dehors.println (e);
Système.dehors.println ("condition false");

conducteur.arrêter();

Maintenant, comprenons le code précédent étape par étape et expliquons quelles actions chaque ligne effectue.

Dans le premier morceau de code, nous obtenons les bibliothèques du navigateur de la machine, puis lançons les pilotes de navigateur Chrome.

Dans cet exemple, nous utilisons le navigateur chromé. La syntaxe suivante est utilisée pour l'implémenter:

Système.SetProperty ("WebDriver.chrome.Conducteur "," C: \\ BrowserDrivers \\ ChromEdriver.exe");
Chromedriver Driver = new ChromEdriver ();

Après cela, nous maximions la fenêtre du navigateur et ouvrons le site Web donné en utilisant la syntaxe donnée suivante:

conducteur.gérer().fenêtre().maximiser();
conducteur.get ("https: // www.eBay.com / ");

Pour cet exemple, nous utilisons le site Web eBay situé sur https: // www.eBay.com /.

Si nous voulons vérifier si l'hyper-ligne «de l'accord quotidien» existe ou non, nous devons savoir où est la «transaction quotidienne» sur le site Web. Pour trouver le localisateur LinkText de l'hyper-line «Daily Deft. La capture d'écran est attachée dans ce qui suit pour voir où nous pouvons trouver la balise «Daily Defactions».

Dans la capture d'écran précédente, nous voyons que la balise pour les «offres quotidiennes» est présente sur la page Web. S'il n'y a pas de balise actuelle, il n'y a pas d'hyper-line «d'offres quotidiennes» actuelles. Nous devons utiliser cet indice suivant:

conducteur.findElement (par.LocatorType («LocatorValue»));

Nous utilisons le pilote.Méthode findElements () pour vérifier si un élément est présent sur une page Web ou non. L'objet «by» est un paramètre pour la commande finy élément qui fournit un objet du type WebElement. Les différentes techniques de localisateur telles que le nom, l'id, la classe de classe, XPath, etc. Le texte du lien peut être utilisé avec l'objet «by». Comme nous le savons, une liste de WebElements située à l'aide du paramètre «By Locator» est renvoyée par la fonction FindElements (). Si l'élément est trouvé, une liste de WebElements non nuls est renvoyé. Sinon, une liste de taille 0 est retournée. En conséquence, la durée de la liste peut être utilisée pour déterminer si une entrée est présente ou non.

Pour cet exemple, nous utilisons le localisateur LinkText comme indiqué dans la syntaxe suivante:

conducteur.findElement (par.linkText ("Daily Offres")).Cliquez sur();

Dans le morceau de code précédent, trouvez d'abord le texte hyper-line des «offres quotidiennes». Après cela, utilisez la fonction click () pour accéder à une autre page.

Après cela, l'attente explicite est implémentée dans la syntaxe donnée suivante:

WebDriverWait Wait = nouveau WebDriverWait (pilote, durée.des secondes (10));

Lorsque nous utilisons le morceau de code précédent pour l'attente explicite, gardez à l'esprit que la fonction attend 10 secondes comme défini dans la méthode WebDriverWait jusqu'à ce que le localisateur donné soit trouvé.

La méthode WebDriverWait est utilisée pour implémenter explicitement. Créez l'objet de référence «Wait» de la classe WebDriverWait. Ensuite, allouer la mémoire avec le nouveau WebDriverWait et passer deux paramètres (1) l'objet de référence du pilote Web et mentionné (2) durée (pilote, durée.des secondes (10)).

Maintenant, utilisez l'objet de référence de la classe WebDriverWait qui est «attendre» pour appeler la méthode toyl () et passer la visibilité attendue OFEMENTEMENTS (par.id) Condition. Si la condition attendue est vraie, retournez le WebElement et attendez 10 secondes jusqu'à ce que cette condition se réalise. Cette condition attendue est la spécification WebElement. Ici, nous devons attendre la visibilité de «l'élément». Si l'élément est visible dans les 5 secondes, attendez. Sinon, il maximise l'attente de 10 secondes.

Voici la syntaxe donnée pour la condition attendue:

Attendez.Jusqu'à (conditions attendues.Visibilité OFFELIMÉLÉE (par.id («élément»)));

Il existe de nombreuses conditions attendues qui sont fournies par le sélénium telles que AlertRissente (), ElelementSelectionStateTobe (), ElementTobeclickable (), etc. Ici, dans ce tutoriel, nous utilisons la condition «VisiBlityOfElementLocated ()».

Passons à la prochaine partie du code où nous avons la «condition vraie»:

essayer
Element WebElement = attendre.Jusqu'à (conditions attendues.Visibilité OFFELIMÉLÉE (par.linkText ("Daily Offres")));
élément.Cliquez sur();
Système.dehors.println ("Condition True");

Catch (exception e)

Système.dehors.println (e);
Système.dehors.println ("condition false");

Pour vérifier si l'élément existe ou non, nous utilisons un bloc d'essai et de capture. Tout ce que nous devons faire est d'essayer de trouver l'élément et d'interagir avec lui.

Element WebElement = attendre.Jusqu'à (conditions attendues.Visibilité OFFELIMÉLÉE (par.linkText ("Daily Offres")));
élément.Cliquez sur();
Système.dehors.println ("Condition True");

Attendez l'élément avec le LinkText «Daily Offres». Si nous trouvons le WebElement, cliquez sur cet élément pour naviguer vers une autre page et imprimer la «condition vraie» dans la console.

Ici, dans la capture d'écran de sortie suivante, nous pouvons voir que la recherche d'élément est réussie. Naviguer dans la page:

Passons à la prochaine partie du code où nous avons la «condition faux»:

essayer
Element WebElement = attendre.Jusqu'à (conditions attendues.Visibilité OFFELIMÉLÉE (par.linkText ("mauvais élément")));
élément.Cliquez sur();
Système.dehors.println ("Condition True");

Catch (exception e)

Système.dehors.println (e);
Système.dehors.println ("condition false");

Si le texte hyper-line «mauvais élément» n'est pas présent sur la page Web, lancez l'exception et imprimez la sortie «False» dans la console.

Dans la capture d'écran de sortie suivante, nous pouvons voir que l'élément se trouve infructueux:

Enfin, après avoir exécuté tout le code, fermez le navigateur à l'aide de la méthode QUIT ().

conducteur.arrêter();

Conclusion

Vous avez maintenant appris les avantages d'attente explicites du sélénium. Vous apprendrez à l'implémenter dans un scénario réel. Cet article met en œuvre l'exemple où vous maintenez l'exécution d'un code supplémentaire jusqu'à ce que vous trouviez l'élément sur un temps d'attente donné. Cet article contient les conditions d'essai et de capture. Si l'élément sort, imprimez la «condition vraie». Sinon, imprimez la «condition faux».