Tekst linku i częściowy tekst linku w Selenium

W czym jest tekst łącza Selenium?

A Link Tekst w Selenium służy do identyfikacji hiperłączy na stronie internetowej. Określa się to za pomocą znacznika kotwiczącego. Do tworzenia hiperłączy na stronie internetowej możemy użyć znacznika zakotwiczenia, po którym następuje tekst łącza.

Linki spełniające kryterium

Dostęp do łączy można uzyskać za pomocą dokładnego lub częściowego dopasowania tekstu łącza. Poniższe przykłady przedstawiają scenariusze, w których istnieje wiele dopasowań, i wyjaśniają, jak WebDriver sobie z nimi poradzi.

W tym samouczku poznamy dostępne metody wyszukiwania łączy i uzyskiwania do nich dostępu za pomocą sterownika internetowego. Omówimy także niektóre typowe problemy napotykane podczas uzyskiwania dostępu do Links i będziemy dalej omawiać, jak je rozwiązać.

Pełny tekst łącza w Selenium – By.linkText()

Dostęp do linków przy użyciu dokładnego tekstu linku odbywa się za pomocą metody By.linkText().. Jeśli jednak istnieją dwa łącza o tym samym tekście, ta metoda umożliwi dostęp tylko do pierwszego. Rozważ poniższy kod HTML

Tekst łącza w Selenium–By.LinkText()

Tekst łącza w Selenium–By.LinkText()

Gdy spróbujesz uruchomić poniższy kod WebDrivera, uzyskasz dostęp do pierwszego linku „kliknij tutaj”.

Tekst łącza w Selenium–By.LinkText()

Kod:

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

}			

Oto jak to działa-

Tekst łącza w Selenium–By.LinkText()

W rezultacie zostaniesz automatycznie przeniesiony do Google.

Tekst łącza w Selenium–By.LinkText()

Wypełnij częściowy tekst łącza w Selenium – By.partialLinkText()

Dostęp do linków za pomocą części tekstu linku odbywa się za pomocą By.częściowyLinkText() metoda. Jeśli określisz częściowy tekst łącza, który ma wiele dopasowań, dostępny będzie tylko pierwszy dopasowania. Rozważ poniższy kod HTML.

Częściowy tekst łącza Selenium – By.partialLinkText()

Częściowy tekst łącza Selenium – By.partialLinkText()

Gdy wykonasz poniższy kod WebDriver, nadal zostaniesz przeniesiony do Google.

Częściowy tekst łącza Selenium – By.partialLinkText()

Kod:

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

Częściowy tekst łącza Selenium – By.partialLinkText()

Jak uzyskać wiele linków z tym samym tekstem linku

Jak zatem obejść powyższy problem? W przypadku, gdy istnieje wiele linków z tym samym tekstem linku, a chcemy uzyskać dostęp do linków innych niż pierwszy, jak to zrobić?

W takich przypadkach używa się zazwyczaj różnych lokalizatorów, np. By.xpath(), By.cssSelector() lub By.tagName().

Najczęściej używany jest By.xpath(). Jest najbardziej niezawodny, ale wygląda na skomplikowany i nieczytelny.

Uwzględniana jest wielkość liter w tekście łącza

Uwzględnianie wielkości liter w tekście łącza

Parametry dla Według.linkText() oraz By.częściowyLinkText() w obu przypadkach rozróżniana jest wielkość liter, co oznacza, że ​​wielkość liter ma znaczenie. Na przykład w Mercury Na stronie głównej Tours znajdują się dwa linki zawierające tekst „egis” – jeden to link „ZAREJESTRUJ SIĘ” znajdujący się w górnym menu, a drugi to link „Zarejestruj się tutaj” znajdujący się w prawej dolnej części strony.

Uwzględnianie wielkości liter w tekście łącza

Chociaż oba łącza zawierają sekwencję znaków „egis”, jedno z nich to metoda „By.partialLinkText()”, która umożliwi dostęp do tych dwóch łączy oddzielnie, w zależności od wielkości liter. Zobacz przykładowy kod poniżej.

Uwzględnianie wielkości liter w tekście łącza

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

    }

Linki na zewnątrz i wewnątrz bloku

Najnowszy standard HTML5 umożliwia umieszczanie tagów wewnątrz i na zewnątrz tagów blokowych, takich jak , lub . Metody „By.linkText()” i „By.partialLinkText()” umożliwiają dostęp do łącza znajdującego się na zewnątrz i wewnątrz tych elementów blokowych. Rozważ poniższy kod HTML.

Linki na zewnątrz i wewnątrz bloku

Linki na zewnątrz i wewnątrz bloku

Poniższy kod WebDrivera umożliwia dostęp do obu tych łączy przy użyciu metody By.partialLinkText().

Linki na zewnątrz i wewnątrz bloku

Kod:

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

Dane wyjściowe potwierdzają, że dostęp do obu linków przebiegł pomyślnie, ponieważ tytuły odpowiednich stron zostały pobrane poprawnie.

Podsumowanie

  • Dostęp do łączy uzyskuje się za pomocą metody click().
  • Oprócz lokalizatorów dostępnych dla dowolnego elementu WebElement, łącza mają również lokalizatory oparte na tekście łącza:
    • Według.linkText() – lokalizuje linki na podstawie dokładnego dopasowania tekstu linku podanego jako parametr.
    • By.częściowyLinkText() – lokalizuje linki na podstawie częściowego dopasowania tekstu do tekstu linku.
  • W obu powyższych lokalizatorach rozróżniana jest wielkość liter.
  • Jeśli istnieje wiele dopasowań, funkcje By.linkText() i By.partialLinkText() wybiorą tylko pierwsze dopasowanie. W przypadku, gdy występuje wiele linków z tym samym tekstem linku, stosowane są inne lokalizatory oparte na xpath, CSS.
  • metoda findElements() & By.tagName(“a”) wyszukuje wszystkie elementy na stronie spełniające kryteria lokalizatora
  • Dostęp do łączy można uzyskać za pomocą metod By.linkText() i By.partialLinkText(), niezależnie od tego, czy znajdują się one wewnątrz, czy na zewnątrz elementów blokowych.