Поиск элементов по тексту ссылки & Частичный текст ссылки в Selenium Webdriver

Содержание:

Anonim

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

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

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

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

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

Вот что вы узнаете -

  • Доступ к ссылкам с использованием точного текстового соответствия: By.linkText ()
  • Доступ к ссылкам с использованием частичного совпадения текста: By.partialLinkText ()
  • Как получить несколько ссылок с одним и тем же текстом ссылки
  • Чувствительность к регистру для текста ссылки
  • Ссылки снаружи и внутри блока

Доступ к ссылкам с использованием точного текстового соответствия: By.linkText ()

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

Когда вы попытаетесь запустить приведенный ниже код WebDriver, вы получите доступ к первой ссылке «щелкните здесь».

Код:

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) {Строка baseUrl = "http://demo.guru99.com/test/link.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();driver.get (baseUrl);driver.findElement (By.linkText («щелкните здесь»)). click ();System.out.println ("заголовок страницы: + driver.getTitle ());driver.quit ();}}

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

В результате вы автоматически попадете в Google.

Доступ к ссылкам с использованием частичного совпадения текста: By.partialLinkText ()

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

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

Код:

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 = новый ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText («здесь»)). click ();System.out.println ("Название страницы: + driver.getTitle ());driver.quit ();}}

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

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

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

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

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

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

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

Код

public static void main (String [] args) {Строка baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();driver.get (baseUrl);String theLinkText = driver.findElement (Автор.partialLinkText ("egis")).getText ();System.out.println (theLinkText);theLinkText = driver.findElement (Автор.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) {Строка baseUrl = "http://demo.guru99.com/test/block.html";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Драйвер WebDriver = новый ChromeDriver ();driver.get (baseUrl);driver.findElement (By.partialLinkText ("Внутри")). click ();System.out.println (driver.getTitle ());driver.navigate (). назад ();driver.findElement (By.partialLinkText ("Снаружи")). 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 () вне зависимости от того, находятся ли они внутри или вне элементов блочного уровня.