Texte du lien et texte du lien partiel dans Selenium

Qu'est-ce que le texte du lien Selenium?

A Lier le texte 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 du texte de leur lien. Les exemples ci-dessous fournissent des scénarios dans lesquels plusieurs correspondances existeraient et expliqueraient comment WebDriver les traiterait.

Dans ce didacticiel, nous apprendrons 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.

Compléter le texte du lien dans Selenium – Par.linkText()

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

Lier le texte dans Selenium–Par.LinkText()

Lier le texte dans Selenium–Par.LinkText()

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

Lier le texte dans Selenium–Par.LinkText()

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 = "https://demo.guru99.com/test/link.html";					
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new ChromeDriver();					
        		
        driver.get(baseUrl);					
        driver.findElement(By.linkText("click here")).click();					
        System.out.println("title of page is: " + driver.getTitle());							
        driver.quit();			
    }		

}			

Voici comment cela fonctionne-

Lier le texte dans Selenium–Par.LinkText()

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

Lier le texte dans Selenium–Par.LinkText()

Compléter le texte du lien partiel dans Selenium – Par.partialLinkText()

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

Texte de lien partiel entrant Selenium – Par.partialLinkText()

Texte de lien partiel entrant Selenium – Par.partialLinkText()

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

Texte de lien partiel entrant Selenium – Par.partialLinkText()

Code:

import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;		

public class P1 {				
    		
    public static void main(String[] args) {									
        String baseUrl = "https://demo.guru99.com/test/accessing-link.html";					
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new ChromeDriver();					
        		
        driver.get(baseUrl);					
        driver.findElement(By.partialLinkText("here")).click();					
        System.out.println("Title of page is: " + driver.getTitle());							
        driver.quit();			
    }		
}

Texte de lien partiel entrant Selenium – Par.partialLinkText()

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

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

Dans de tels cas, généralement, 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.

Sensibilité à la casse pour le texte du lien

Sensibilité à la casse pour le texte du lien

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

Sensibilité à la casse pour le texte du lien

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. Voir l'exemple de code ci-dessous.

Sensibilité à la casse pour le texte du lien

Code

public static void main(String[] args) {								
        String baseUrl = "https://demo.guru99.com/test/newtours/";					
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new ChromeDriver();					
        		
        driver.get(baseUrl);					
        String theLinkText = driver.findElement(By					
                .partialLinkText("egis"))			
                .getText();		
        System.out.println(theLinkText);					
        theLinkText = driver.findElement(By					
                .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 telles que , 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.

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

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

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

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

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 = "https://demo.guru99.com/test/block.html";					
        System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");					
        WebDriver driver = new 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();			
    }		
}		

Le résultat ci-dessus confirme que les deux liens ont été consultés avec succès car leurs titres de page respectifs ont été récupérés correctement.

Résumé

  • Les liens sont accessibles à l'aide de la méthode click().
  • Outre les localisateurs disponibles pour n'importe quel WebElement, les liens disposent également de localisateurs basés sur le texte des liens :
    • Par.linkText() – localise les liens en fonction de la correspondance exacte du texte du lien fourni en paramètre.
    • Par.partialLinkText() – localise les liens en fonction de la correspondance 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() ne sélectionneront que 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 et CSS sont utilisés.
  • La méthode findElements() & By.tagName("a") recherche 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 se trouvent à l'intérieur ou à l'extérieur d'éléments de niveau bloc.