Zoek elementen op linktekst en gedeeltelijke linktekst in Selenium

Wat is linktekst in Selenium?

A Linktekst in Selenium wordt gebruikt om de hyperlinks op een webpagina te identificeren. Het wordt bepaald met behulp van een ankertag. Voor het maken van hyperlinks op een webpagina kunnen we een ankertag gebruiken, gevolgd door de link Tekst.

Links die voldoen aan een criterium

Links zijn toegankelijk via een exacte of gedeeltelijke overeenkomst van de linktekst. De onderstaande voorbeelden geven scenario's waarin er meerdere overeenkomsten zouden bestaan ​​en leggen uit hoe WebDriver hiermee zou omgaan.

In deze tutorial leren we de beschikbare methoden om de links te vinden en te openen met behulp van Webdriver. Ook zullen we enkele van de veelvoorkomende problemen bespreken die u tegenkomt bij het openen van Links, en zullen we verder bespreken hoe u deze kunt oplossen.

Volledige linktekst in Selenium – By.linkText()

Toegang krijgen tot links met behulp van hun exacte linktekst gebeurt via de By.linkText() methode. Als er echter twee links zijn die dezelfde linktekst hebben, heeft deze methode alleen toegang tot de eerste. Beschouw de onderstaande HTML-code

Linktekst in Selenium–By.LinkText()

Linktekst in Selenium–By.LinkText()

Wanneer u de onderstaande WebDriver-code probeert uit te voeren, krijgt u toegang tot de eerste 'klik hier'-link

Linktekst in Selenium–By.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 = "http://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();			
    }		

}			

Hier is hoe het werkt-

Linktekst in Selenium–By.LinkText()

Hierdoor wordt u automatisch naar Google geleid.

Linktekst in Selenium–By.LinkText()

Volledige gedeeltelijke linktekst in Selenium – By.partialLinkText()

Toegang krijgen tot links met behulp van een deel van hun linktekst gebeurt met behulp van de Door.partialLinkText() methode. Als u een gedeeltelijke linktekst opgeeft die meerdere overeenkomsten heeft, wordt alleen de eerste overeenkomst geopend. Beschouw de onderstaande HTML-code.

Gedeeltelijke linktekst in Selenium – By.partialLinkText()

Gedeeltelijke linktekst in Selenium – By.partialLinkText()

Wanneer u onderstaande WebDriver-code uitvoert, wordt u alsnog naar Google geleid.

Gedeeltelijke linktekst in Selenium – By.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 = "http://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();			
    }		
}

Gedeeltelijke linktekst in Selenium – By.partialLinkText()

Hoe u meerdere links met dezelfde linktekst kunt krijgen

Dus, hoe omzeil je het bovenstaande probleem? In gevallen waarin er meerdere links zijn met dezelfde linktekst en we toegang willen tot andere links dan de eerste, hoe gaan we dat dan doen?

In dergelijke gevallen zijn er over het algemeen verschillende locators nodig viz… By.xpath(), By.cssSelector() of By.tagName() worden gebruikt.

De meest gebruikte is By.xpath(). Het is de meest betrouwbare, maar het ziet er complex en ook niet leesbaar.

Hoofdlettergevoeligheid voor linktekst

Hoofdlettergevoeligheid voor linktekst

De parameters voor Door.linkText() en Door.partialLinkText() zijn beide hoofdlettergevoelig, wat betekent dat hoofdlettergebruik ertoe doet. Op de startpagina van Mercury Tours zijn er bijvoorbeeld twee links die de tekst “egis” bevatten – de ene is de link “REGISTER” in het bovenste menu, en de andere is de link “Registreer hier” rechtsonder. van de pagina.

Hoofdlettergevoeligheid voor linktekst

Hoewel beide links de tekenreeks “egis” bevatten, is er één die met de “By.partialLinkText()”-methode afzonderlijk toegang krijgt tot deze twee links, afhankelijk van het hoofdlettergebruik van de karakters. Zie de voorbeeldcode hieronder.

Hoofdlettergevoeligheid voor linktekst

Code

public static void main(String[] args) {								
        String baseUrl = "http://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();			

    }

Links buiten en binnen een blok

Met de nieuwste HTML5-standaard kunnen tags binnen en buiten tags op blokniveau worden geplaatst, zoals , , of . De methoden “By.linkText()” en “By.partialLinkText()” hebben toegang tot een link die zich buiten en binnen deze elementen op blokniveau bevindt. Beschouw de onderstaande HTML-code.

Links buiten en binnen een blok

Links buiten en binnen een blok

De onderstaande WebDriver-code heeft toegang tot beide links met behulp van de By.partialLinkText()-methode.

Links buiten en binnen een blok

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");					
        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();			
    }		
}		

De bovenstaande uitvoer bevestigt dat beide links met succes zijn geopend omdat hun respectieve paginatitels correct zijn opgehaald.

Samengevat

  • Links zijn toegankelijk via de click()-methode.
  • Naast de locators die beschikbaar zijn voor elk WebElement, hebben Links ook op linktekst gebaseerde locators:
    • Door.linkText() – lokaliseert de links op basis van de exacte overeenkomst met de tekst van de link die als parameter is opgegeven.
    • Door.partialLinkText() – lokaliseert links op basis van de gedeeltelijke tekstovereenkomst van de tekst van de link.
  • Beide bovenstaande locators zijn hoofdlettergevoelig.
  • Als er meerdere overeenkomsten zijn, selecteren By.linkText() en By.partialLinkText() alleen de eerste overeenkomst. In dergelijke gevallen waarin meerdere links met dezelfde linktekst aanwezig zijn, worden andere locators op basis van xpath en CSS gebruikt.
  • findElements() & By.tagName(“a”) methode vindt alle elementen op de pagina die voldoen aan de locatorcriteria
  • Links zijn toegankelijk via By.linkText() en By.partialLinkText(), ongeacht of ze zich binnen of buiten elementen op blokniveau bevinden.