Localiser les éléments par le texte du lien & Texte de lien partiel dans Selenium Webdriver

Table des matières:

Anonim

Qu'est-ce que le texte de lien dans Selenium?

Un texte de lien dans Selenium est utilisé pour identifier les hyperliens sur une page Web. Il est déterminé à l'aide d'une balise d'ancrage. Pour créer les hyperliens sur une page Web, nous pouvons utiliser une balise d'ancrage suivie du lien Texte.

Liens correspondant à un critère

Les liens sont accessibles en utilisant une correspondance exacte ou partielle de leur texte de lien. Les exemples ci-dessous fournissent des scénarios dans lesquels plusieurs correspondances existeraient et expliqueraient comment WebDriver les traiterait.

Dans ce didacticiel, nous allons apprendre les méthodes disponibles pour rechercher et accéder aux liens à l'aide de Webdriver. Nous discuterons également de certains des problèmes courants rencontrés lors de l'accès aux liens et discuterons plus en détail de la manière de les résoudre.

Voici ce que vous apprendrez

  • Accès aux liens à l'aide de la correspondance de texte exacte: By.linkText ()
  • Accès aux liens à l'aide de la correspondance de texte partielle: By.partialLinkText ()
  • Comment obtenir plusieurs liens avec le même texte de lien
  • Respect de la casse pour le texte du lien
  • Liens à l'extérieur et à l'intérieur d'un bloc

Accès aux liens à l'aide de la correspondance de texte exacte: By.linkText ()

L'accès aux liens en utilisant leur texte de lien exact se fait via la méthode By.linkText () . Cependant, s'il existe deux liens qui ont le même texte de lien, cette méthode n'accédera qu'au premier. Considérez le code HTML ci-dessous

Lorsque vous essayez d'exécuter le code WebDriver ci-dessous, vous accédez au premier lien «cliquez ici»

Code:

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;public class MyClass {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();driver.get (baseUrl);driver.findElement (By.linkText ("cliquez ici")). click ();System.out.println ("le titre de la page est: + driver.getTitle ());driver.quit ();}}

Voici comment cela fonctionne-

En conséquence, vous serez automatiquement redirigé vers Google.

Accès aux liens à l'aide de la correspondance de texte partielle: By.partialLinkText ()

L'accès aux liens à l'aide d'une partie de leur texte de lien se fait à l'aide de la méthode By.partialLinkText () . Si vous spécifiez un texte de lien partiel qui a plusieurs correspondances, seule la première correspondance sera accessible. Considérez le code HTML ci-dessous.

Lorsque vous exécutez le code WebDriver ci-dessous, vous serez toujours redirigé vers Google.

Code:

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;classe publique P1 {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("ici")). click ();System.out.println ("Le titre de la page est: + driver.getTitle ());driver.quit ();}}

Comment obtenir plusieurs liens avec le même texte de lien

Alors, comment contourner le problème ci-dessus? Dans les cas où il y a plusieurs liens avec le même texte de lien et que nous voulons accéder aux liens autres que le premier, comment procéder?

Dans de tels cas, en général, différents localisateurs à savoir… By.xpath (), By.cssSelector () ou By.tagName () sont utilisés.

Le plus couramment utilisé est By.xpath (). C'est le plus fiable mais il semble également complexe et illisible.

Respect de la casse pour le texte du lien

Les paramètres de By.linkText () et By.partialLinkText () sont tous deux sensibles à la casse, ce qui signifie que la capitalisation est importante. Par exemple, sur la page d'accueil de Mercury Tours, il y a deux liens qui contiennent le texte "egis" - l'un est le lien "ENREGISTRER" qui se trouve dans le menu supérieur, et l'autre est le lien "S'inscrire ici" qui se trouve dans la partie inférieure droite de la page.

Bien que les deux liens contiennent la séquence de caractères "egis", l'un d'entre eux est la méthode "By.partialLinkText ()" qui accédera à ces deux liens séparément en fonction de la capitalisation des caractères. Consultez l'exemple de code ci-dessous.

Code

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();driver.get (baseUrl);String theLinkText = driver.findElement (Par.partialLinkText ("egis")).getText ();System.out.println (theLinkText);theLinkText = driver.findElement (Par.partialLinkText ("EGIS")).getText ();System.out.println (theLinkText);driver.quit ();}

Liens à l'extérieur et à l'intérieur d'un bloc

La dernière norme HTML5 permet aux balises d'être placées à l'intérieur et à l'extérieur des balises de niveau bloc comme

,

ou

. Les méthodes «By.linkText ()» et «By.partialLinkText ()» peuvent accéder à un lien situé à l'extérieur et à l'intérieur de ces éléments de niveau bloc. Considérez le code HTML ci-dessous.

Le code WebDriver ci-dessous accède à ces deux liens à l'aide de la méthode By.partialLinkText ().

Code:

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;public class MyClass {public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/block.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Pilote WebDriver = nouveau ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("Inside")). click ();System.out.println (driver.getTitle ());driver.navigate (). back ();driver.findElement (By.partialLinkText ("Outside")). click ();System.out.println (driver.getTitle ());driver.quit ();}}

La sortie ci-dessus confirme que les deux liens ont été accédés avec succès car leurs titres de page respectifs ont été récupérés correctement.

Résumé

  • Les liens sont accessibles en utilisant la méthode click ().
  • Outre les localisateurs disponibles pour tout WebElement, les liens ont également des localisateurs basés sur le texte des liens:
    • By.linkText () - localise les liens en fonction de la correspondance exacte du texte du lien fourni en tant que paramètre.
    • By.partialLinkText () - localise les liens en fonction de la correspondance de texte partielle du texte du lien.
  • Les deux localisateurs ci-dessus sont sensibles à la casse.
  • S'il y a plusieurs correspondances, By.linkText () et By.partialLinkText () sélectionneront uniquement la première correspondance. Dans les cas où plusieurs liens avec le même texte de lien sont présents, d'autres localisateurs basés sur xpath, CSS sont utilisés.
  • La méthode findElements () & By.tagName ("a") trouve tous les éléments de la page correspondant aux critères du localisateur
  • Les liens sont accessibles par By.linkText () et By.partialLinkText (), qu'ils soient à l'intérieur ou à l'extérieur des éléments de niveau bloc.