Linktekst og delvis linktekst ind 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 = "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();			
    }		

}			

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

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 bruges der generelt forskellige locatorer, nemlig... By.xpath(), By.cssSelector() eller By.tagName().

Mest brugt er By.xpath(). Det er den mest pรฅlidelige, men den ser ogsรฅ kompleks og ulรฆselig ud.

Store og smรฅ bogstaver for linktekst

Store og smรฅ bogstaver for linktekst

Parametrene for By.linkText() og By.partialLinkText() er begge store og smรฅ, hvilket betyder, at brug af store og smรฅ bogstaver betyder noget. For eksempel i Mercury Tours' hjemmeside, der er to links, der indeholder teksten "egis" - det ene er "REGISTER"-linket i topmenuen, og det andet er "Tilmeld dig her"-linket nederst til hรธjre pรฅ 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 = "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();			

    }

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

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.

Opsummer dette indlรฆg med: