Знайдіть елементи за текстом посилання та частковим текстом посилання Selenium

У чому текст посилання Selenium?

A Текст посилання в Selenium використовується для ідентифікації гіперпосилань на веб-сторінці. Визначається за допомогою анкерного тега. Для створення гіперпосилань на веб-сторінці ми можемо використовувати тег прив’язки, за яким слідує текст посилання.

Посилання, що відповідають критерію

Посилання можна отримати за допомогою точного або часткового збігу тексту посилання. У наведених нижче прикладах наведено сценарії, коли може існувати кілька збігів, і пояснюється, як WebDriver справлятиметься з ними.

У цьому посібнику ми дізнаємося про доступні методи пошуку та доступу до посилань за допомогою Webdriver. Крім того, ми обговоримо деякі типові проблеми, з якими стикаємося під час доступу до Links, і далі обговоримо, як їх вирішити.

Повний текст посилання в Selenium – By.linkText()

Доступ до посилань за допомогою їх точного тексту здійснюється за допомогою методу By.linkText().. Однак якщо є два посилання з однаковим текстом посилання, цей метод матиме доступ лише до першого. Розгляньте наведений нижче HTML-код

Текст посилання Selenium–By.LinkText()

Текст посилання Selenium–By.LinkText()

Коли ви спробуєте запустити код WebDriver нижче, ви отримаєте доступ за першим посиланням «клацніть тут».

Текст посилання Selenium–By.LinkText()

код:

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

}			

Ось як це працює -

Текст посилання Selenium–By.LinkText()

У результаті ви автоматично перейдете до Google.

Текст посилання Selenium–By.LinkText()

Повний частковий текст посилання в Selenium – By.partialLinkText()

Доступ до посилань за допомогою частини тексту посилань здійснюється за допомогою By.partialLinkText() метод. Якщо ви вкажете частковий текст посилання, який містить кілька збігів, буде доступний лише перший збіг. Розгляньте наведений нижче HTML-код.

Частковий текст посилання Selenium – By.partialLinkText()

Частковий текст посилання Selenium – By.partialLinkText()

Коли ви виконаєте наведений нижче код WebDriver, ви все одно перейдете до Google.

Частковий текст посилання Selenium – By.partialLinkText()

код:

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

Частковий текст посилання Selenium – By.partialLinkText()

Як отримати кілька посилань з однаковим текстом посилання

Отже, як обійти вищевказану проблему? У випадках, коли існує кілька посилань з однаковим текстом посилання, і ми хочемо отримати доступ до посилань, відмінних від першого, як це зробити?

У таких випадках, як правило, використовуються різні локатори, а саме… By.xpath(), By.cssSelector() або By.tagName().

Найчастіше використовується By.xpath(). Він найнадійніший, але виглядає складним і нерозбірливим.

Чутливість до регістру тексту посилання

Чутливість до регістру тексту посилання

Параметри для By.linkText() та By.partialLinkText() обидва чутливі до регістру, тобто використання великих літер має значення. Наприклад, в Mercury На домашній сторінці Tours є два посилання, які містять текст «egis» – одне це посилання «ЗАРЕЄСТРУВАТИСЯ» у верхньому меню, а інше це посилання «Зареєструватися тут» у нижній правій частині сторінки.

Чутливість до регістру тексту посилання

Хоча обидва посилання містять послідовність символів «egis», один метод «By.partialLinkText()» отримає доступ до цих двох посилань окремо залежно від використання великих літер символів. Перегляньте приклад коду нижче.

Чутливість до регістру тексту посилання

код

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

    }

Посилання поза та всередині блоку

Останній стандарт HTML5 дозволяє розміщувати теги всередині та поза тегами рівня блоку, наприклад , або . Методи “By.linkText()” і “By.partialLinkText()” можуть отримати доступ до посилання, розташованого поза та всередині цих елементів рівня блоку. Розгляньте наведений нижче HTML-код.

Посилання поза та всередині блоку

Посилання поза та всередині блоку

Наведений нижче код WebDriver отримує доступ до обох цих посилань за допомогою методу By.partialLinkText().

Посилання поза та всередині блоку

код:

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

Вихідні дані вище підтверджують, що обидва посилання були успішно перейшли, оскільки їх відповідні заголовки сторінок були отримані правильно.

Підсумки

  • Доступ до посилань здійснюється за допомогою методу click().
  • Окрім локаторів, доступних для будь-якого WebElement, посилання також мають локатори на основі тексту посилань:
    • By.linkText() – знаходить посилання на основі точного збігу тексту посилання, наданого як параметр.
    • By.partialLinkText() – знаходить посилання на основі часткового збігу тексту посилання.
  • Обидва наведені вище локатори чутливі до регістру.
  • Якщо є кілька збігів, By.linkText() і By.partialLinkText() вибере лише перший збіг. У таких випадках, коли присутні кілька посилань з однаковим текстом посилання, використовуються інші локатори на основі xpath, CSS.
  • Метод findElements() & By.tagName(“a”) знаходить усі елементи на сторінці, які відповідають критеріям локатора
  • Доступ до посилань можна отримати за допомогою By.linkText() і By.partialLinkText() незалежно від того, знаходяться вони всередині чи поза елементами рівня блоку.