Länktext och partiell länktext in Selenium
Vad är länktext i Selenium?
A Länka text in Selenium används för att identifiera hyperlänkarna på en webbsida. Det bestäms med hjälp av en ankarlapp. För att skapa hyperlänkarna på en webbsida kan vi använda en ankartagg följt av länken Text.
Länkar som matchar ett kriterium
Länkar kan nås genom att exakt eller delvis matcha deras länktext. Exemplen nedan ger scenarier där flera matchningar skulle existera och skulle förklara hur WebDriver skulle hantera dem.
I den här handledningen kommer vi att lära oss de tillgängliga metoderna för att hitta och komma åt länkarna med hjälp av Webdriver. Vi kommer också att diskutera några av de vanliga problemen som möter när du använder länkar och kommer att diskutera vidare hur man löser dem.
Komplett länktext in Selenium – By.linkText()
Åtkomst till länkar med deras exakta länktext görs genom By.linkText()-metoden. Men om det finns två länkar som har samma länktext kommer den här metoden bara åt den första. Tänk på HTML-koden nedan
När du försöker köra WebDriver-koden nedan kommer du åt den första "klicka här"-länken
Koda:
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(); } }
Så här fungerar det-
Som ett resultat kommer du automatiskt att tas till Google.
Komplett partiell länktext in Selenium – By.partialLinkText()
Att komma åt länkar med en del av deras länktext görs med hjälp av By.partialLinkText() metod. Om du anger en dellänktext som har flera matchningar, kommer endast den första matchningen att nås. Tänk på HTML-koden nedan.
När du kör WebDriver-koden nedan kommer du fortfarande att tas till Google.
Koda:
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(); } }
Hur man får flera länkar med samma länktext
Så, hur kan man komma runt ovanstående problem? I de fall där det finns flera länkar med samma länktext och vi vill komma åt andra länkar än den första, hur går vi tillväga?
I sådana fall används i allmänhet olika lokaliseringsorgan, nämligen... By.xpath(), By.cssSelector() eller By.tagName().
Vanligast är By.xpath(). Det är den mest tillförlitliga men den ser också komplex och oläsbar ut.
Skiftlägeskänslighet för länktext
Parametrarna för By.linkText() och By.partialLinkText() är båda skiftlägeskänsliga, vilket betyder att versaler är viktiga. Till exempel i Mercury Tours hemsida, det finns två länkar som innehåller texten "egis" - den ena är "REGISTRERA"-länken som finns i toppmenyn, och den andra är "Registrera dig här"-länken som finns längst ner till höger på sidan.
Även om båda länkarna innehåller teckensekvensen "egis", är den ena metoden "By.partialLinkText()" som kommer åt dessa två länkar separat beroende på hur stora bokstäverna används. Se exempelkoden nedan.
Koda
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(); }
Länkar utanför och inuti ett block
Den senaste HTML5-standarden tillåter att taggarna placeras inuti och utanför blocknivåtaggar som , , eller . Metoderna "By.linkText()" och "By.partialLinkText()" kan komma åt en länk utanför och inuti dessa blocknivåelement. Tänk på HTML-koden nedan.
WebDriver-koden nedan får åtkomst till båda dessa länkar med By.partialLinkText()-metoden.
Koda:
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(); } }
Utdata ovan bekräftar att båda länkarna nåddes framgångsrikt eftersom deras respektive sidtitlar hämtades korrekt.
Sammanfattning
- Länkar nås med metoden click().
- Förutom lokaliseringarna som är tillgängliga för alla WebElement, har länkar också länktextbaserade lokaliseringsverktyg:
- By.linkText() – lokaliserar länkarna baserat på den exakta matchningen av länkens text som tillhandahålls som en parameter.
- By.partialLinkText() – lokaliserar länkar baserat på den partiella textmatchningen av länkens text.
- Båda ovanstående lokaliserar är skiftlägeskänsliga.
- Om det finns flera matchningar kommer By.linkText() och By.partialLinkText() bara att välja den första matchningen. I sådana fall där flera länkar med samma länktext finns, används andra locatorer baserade på xpath, CSS.
- metoden findElements() & By.tagName(“a”) hittar alla element på sidan som matchar lokaliseringskriterierna
- Länkar kan nås av By.linkText() och By.partialLinkText() oavsett om de är inuti eller utanför blocknivåelement.