Текст ссылки и частичный текст ссылки в Selenium

Что такое текст ссылки Selenium?

A Текст ссылки в Selenium используется для идентификации гиперссылок на веб-странице. Определяется с помощью тега привязки. Для создания гиперссылок на веб-странице мы можем использовать тег привязки, за которым следует текст ссылки.

Ссылки, соответствующие критерию

Доступ к ссылкам возможен при точном или частичном совпадении текста ссылки. В приведенных ниже примерах представлены сценарии, в которых может существовать несколько совпадений, и объясняется, как WebDriver будет с ними справляться.

В этом уроке мы изучим доступные методы поиска и доступа к ссылкам с помощью Webdriver. Кроме того, мы обсудим некоторые распространенные проблемы, возникающие при доступе к ссылкам, и обсудим, как их решить.

Полный текст ссылки в Selenium – По.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 = "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();			
    }		

}			

Вот как это работает-

Текст ссылки в 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 = "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();			
    }		
}

Частичный текст ссылки Selenium – By.partialLinkText()

Как получить несколько ссылок с одним и тем же текстом ссылки

Итак, как обойти вышеописанную проблему? Как нам поступить в случаях, когда имеется несколько ссылок с одинаковым текстом ссылки и мы хотим получить доступ к ссылкам, отличным от первой?

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

Чаще всего используется By.xpath(). Это самый надежный вариант, но он выглядит сложным и нечитаемым.

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

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

Параметры для По.linkText() и By.partialLinkText() оба чувствительны к регистру, а это означает, что использование заглавных букв имеет значение. Например, в Mercury На домашней странице Tours есть две ссылки, содержащие текст «egis»: одна — это ссылка «РЕГИСТРАЦИЯ», расположенная в верхнем меню, а другая — ссылка «Зарегистрируйтесь здесь», расположенная в правой нижней части страницы.

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

Хотя обе ссылки содержат последовательность символов «egis», одна из них — метод «By.partialLinkText()», который будет обращаться к этим двум ссылкам отдельно в зависимости от регистра заглавных букв. См. пример кода ниже.

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

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

    }

Ссылки снаружи и внутри блока

Последний стандарт 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 = "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();			
    }		
}		

Вывод выше подтверждает, что обе ссылки были успешно доступны, поскольку соответствующие заголовки страниц были получены правильно.

Резюме

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