Find elementer efter linktekst og delvis linktekst i Selenium

Hvad er linktekst i Selenium?

A Link tekst ind Selenium bruges til at identificere hyperlinks på en webside. Det bestemmes ved hjælp af et ankermærke. Til oprettelse af hyperlinks på en webside kan vi bruge et ankertag efterfulgt af linket Tekst.

Links, der matcher et kriterium

Links kan tilgås ved at bruge et nøjagtigt eller delvist match af deres linktekst. Eksemplerne nedenfor giver scenarier, hvor flere matches ville eksistere, og forklarer, hvordan WebDriver ville håndtere dem.

I denne vejledning lærer vi de tilgængelige metoder til at finde og få adgang til links ved hjælp af Webdriver. Vi vil også diskutere nogle af de almindelige problemer, man står over for, når man får adgang til links, og vil yderligere diskutere, hvordan man løser dem.

Fuldfør linktekst ind Selenium – By.linkText()

Adgang til links ved hjælp af deres nøjagtige linktekst sker gennem By.linkText() metoden. Men hvis der er to links, der har den samme linktekst, vil denne metode kun få adgang til det første. Overvej HTML-koden nedenfor

Link tekst ind Selenium–By.LinkText()

Link tekst ind Selenium–By.LinkText()

Når du prøver at køre WebDriver-koden nedenfor, får du adgang til det første "klik her"-link

Link tekst ind Selenium–By.LinkText()

Kode:

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

}			

Her er hvordan det virker-

Link tekst ind Selenium–By.LinkText()

Som et resultat bliver du automatisk ført til Google.

Link tekst ind Selenium–By.LinkText()

Komplet delvis linktekst ind Selenium – By.partialLinkText()

Adgang til links ved hjælp af en del af deres linktekst sker ved hjælp af By.partialLinkText() metode. Hvis du angiver en delvis linktekst, der har flere matches, vil kun den første match blive tilgået. Overvej HTML-koden nedenfor.

Delvis linktekst ind Selenium – By.partialLinkText()

Delvis linktekst ind Selenium – By.partialLinkText()

Når du udfører WebDriver-koden nedenfor, vil du stadig blive ført til Google.

Delvis linktekst ind Selenium – By.partialLinkText()

Kode:

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

Delvis linktekst ind Selenium – By.partialLinkText()

Sådan får du flere links med den samme linktekst

Så hvordan kan man omgå ovenstående problem? I tilfælde, hvor der er flere links med samme linktekst, og vi ønsker at få adgang til andre links end det første, hvordan gør vi det?

I sådanne tilfælde, generelt, forskellige locatorer viz… By.xpath(), By.cssSelector() eller By.tagName() bruges.

Mest brugt er By.xpath(). Det er den mest pålidelige, men den ser complex og ikke-readable også.

Store og små bogstaver for linktekst

Store og små bogstaver for linktekst

Parametrene for By.linkText() , By.partialLinkText() er begge store og små, hvilket betyder, at brug af store og små bogstaver betyder noget. For eksempel er der på Mercury Tours' hjemmeside to links, der indeholder teksten "egis" - det ene er "REGISTER"-linket, der findes i topmenuen, og det andet er "Register here"-linket, der findes nederst til højre. af siden.

Store og små bogstaver for linktekst

Selvom begge links indeholder tegnsekvensen "egis", den ene er "By.partialLinkText()" metoden vil få adgang til disse to links separat afhængigt af bogstavernes store bogstaver. Se eksempelkoden nedenfor.

Store og små bogstaver for linktekst

Kode

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 udenfor og inde i en blok

Den nyeste HTML5-standard gør det muligt at placere tags inden for og uden for tags på blokniveau som , , eller . Metoderne "By.linkText()" og "By.partialLinkText()" kan få adgang til et link placeret uden for og inde i disse blokniveauelementer. Overvej HTML-koden nedenfor.

Links udenfor og inde i en blok

Links udenfor og inde i en blok

WebDriver-koden nedenfor giver adgang til begge disse links ved hjælp af By.partialLinkText()-metoden.

Links udenfor og inde i en blok

Kode:

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

Outputtet ovenfor bekræfter, at begge links blev tilgået med succes, fordi deres respektive sidetitler blev hentet korrekt.

Resumé

  • Links tilgås ved hjælp af click()-metoden.
  • Bortset fra lokalisatorerne, der er tilgængelige for ethvert WebElement, har links også linktekstbaserede lokaliseringsværktøjer:
    • By.linkText() – lokaliserer linkene baseret på det nøjagtige match af linkets tekst angivet som en parameter.
    • By.partialLinkText() – lokaliserer links baseret på den delvise tekstmatch af linkets tekst.
  • Begge de ovennævnte locatorer er følsomme for store og små bogstaver.
  • Hvis der er flere matches, vil By.linkText() og By.partialLinkText() kun vælge det første match. I sådanne tilfælde, hvor flere links med samme linktekst er til stede, bruges andre locatorer baseret på xpath, CSS.
  • findElements() & By.tagName(“a”) metoden finder alle elementer på siden, der matcher lokaliseringskriterierne
  • Links kan tilgås af By.linkText() og By.partialLinkText(), uanset om de er inden for eller uden for blokniveauelementer.