Рубрики
Без рубрики

Полное Руководство По Использованию XPath В Селене С Примерами

Мы рассмотрим этапы поиска элемента по XPath в Selenium с примерами, чтобы помочь вам понять различные способы использования динамического XPath. Помечено csharp, java, тестирование.

Идентификация элемента всегда была самой сложной частью и поэтому требовала точного и правильного подхода. Если вы не можете найти элементы с помощью легко доступных подходов, таких как идентификатор, класс, имя, ссылка или название тега, то XPath в Selenium может помочь вам. Расположение динамических элементов всегда было проблемной областью, в то время как вы хотите автоматизировать сценарии, единственным лучом надежды справиться с такими неудачами является XPath. В моей текущей статье я расскажу о шагах поиска элемента с помощью примера XPath в Selenium и его различных способах. Мы рассмотрим следующие разделы: 1. Что такое XPath в Selenium? 2. Типы XPath в Selenium 2.1 Абсолютный 2.2 Относительный 3. Написание динамического XPath в Selenium различными способами : 3.1 Базовый XPath 3.2 Использование ‘ИЛИ’ & ‘И’ 3.3 Использование Содержит() 3.4 Использование Начинается С 3.5 Использование текста() 3.6 Использование индекса 3.7 Использование цепного пути XPath 3.8 Оси XPath 3.8.1 Следующий 3.8.1.1 Следующий Брат Или Сестра 3.8.2 Предшествующий 3.8.2.1 Предшествующий Брат Или Сестра 3.8.3 Ребенок 3.8.4 Родитель 3.8.5 Потомки 3.8.6 Предки

Если вы хотите изучить другие подходы к поиску элемента, вы можете просмотреть следующие статьи: 1. Как найти элемент по идентификатору 2. Как найти элемент по имени 3. Как найти элемент по имени тега 4. Как найти элемент с помощью CSS-селекторов 5. Различные локаторы в Selenium WebDriver

Итак, Что Такое XPath В Selenium?

XPath, известный как путь XML, – это язык, который помогает запрашивать XML-документы. Он состоит из выражения для пути вместе с определенными условиями для определения местоположения определенного элемента.

Итак, давайте посмотрим, как написать XPath в Selenium. Ниже приведена структура DOM для Страницы регистрации лямбда-теста :

Ссылка на скриншот страницы:

Лямбда-тест – это облако кросс-браузерного тестирования, которое предлагает сетку Selenium из более чем 2000 реальных браузеров и версий браузеров, чтобы помочь вам обеспечить бесперебойную работу пользователя. Нажмите здесь, чтобы начать бесплатно.

Чтобы визуализировать приведенный выше XML-документ, я создал приведенную ниже блок-схему.

Здесь я напишу XPath в Selenium из корневого узла, который в нашем случае является тегом формы, затем найду поле полного имени, используя дочерний элемент div 2 и значение атрибута поля полного имени. Путь XPath, созданный в этом случае, будет выглядеть следующим образом: Ниже приведен фрагмент кода, выделяющий путь XPath, написанный с использованием относительного пути XPath для страницы регистрации LambdaTest.

//форма/раздел[@class=’ col-sm-12]

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

//имя тега[@атрибут]

Здесь

  1. // Обозначает текущий узел
  2. Имя тега:
  3. Определите имя тега, на которое вы ссылаетесь, чтобы найти элемент. Значение атрибута:
  4. Атрибут тега определения, с помощью которого вы хотите сузить поиск.

В настоящее время, благодаря использованию множества плагинов и инструментов, можно относительно легко найти XPath в Selenium. Причина, по которой я не призываю людей делать это, заключается в том, что XPath, предоставляемый этими инструментами, иногда оказывается хрупким. Кроме того, это может привести к тому, что люди забудут основные концепции создания локаторов XPath. Используя инструменты разработки firebug и Chrome, можно также скопировать необходимый XPath в Selenium.

Типы XPath В Selenium

Существует два типа XPath

  1. Абсолютный XPath
  2. Относительный путь XPath

Пример Абсолютного XPath В Selenium

В случае абсолютного XPath в Selenium выражение XPath создается с использованием выделения из корневого узла. Он начинается с одной косой черты “/” и проходит от корня до всего DOM, чтобы добраться до нужного элемента. Самым большим недостатком использования этого в качестве определения местоположения элемента является то, что в ходе разработки какие-либо изменения, внесенные в путь, могут привести к неудачному выражению XPath. Например:

/html/тело/раздел[1]/раздел/раздел/раздел[2]/раздел/форма/раздел[2]/ввод[3]

В приведенном выше примере XPath в Selenium, если имя какого-либо тега, например раздела или одного из разделов, изменится, весь XPath станет недействительным, что приведет к сбою скрипта.

Относительный пример XPath В Селене

В случае относительного XPath в Selenium выражение XPath генерируется из середины структуры DOM. Он представлен двойной косой чертой “//”, обозначающей текущий узел. В этом случае поиск начнется с указанного имени тега и строкового значения. Он более компактен, прост в использовании и менее подвержен поломкам. Например:

//ввод[@имя=’электронная почта’]

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

Ниже приведен фрагмент кода, выделяющий XPath, написанный с использованием относительного XPath для страницы регистрации лямбда-теста.

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class RelativeXpathExample {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", " path to chromedriver ");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://accounts.lambdatest.com/register");
        //Relative xpath for organization field
        driver.findElement(By.xpath("//input[@name='organization_name']")).sendKeys("Lambdatest Org");
        //Relative xpath for full name field
        driver.findElement(By.xpath("//input[@name='name']")).sendKeys("Sadhvi Singh");
        driver.close();

    }

}

Написание Сложного И Динамического XPath В Selenium С Помощью Различных Методов

Использование базового XPath

Это общий и синтаксический подход к написанию XPath в Selenium, который представляет собой комбинацию имени тега и значения атрибута. Вот несколько основных примеров XPath в Selenium:

  • Xpath=//ввод]
  • Xpath=//a [@href= ‘ https://www.lambdatest.com/ ‘]
  • Xpath=//* [ @идентификатор ]
  • Xpath=//ввод[имя=’электронная почта’][@заполнитель=’Рабочая электронная почта’]

Первые два примера в базовом списке XPath кажутся самоочевидными. В нем мы использовали теги в качестве входных данных и привязки тега с соответствующим значением атрибута. Последние два примера – это просто расширенная версия использования XPath в Selenium. В третьем примере мы просто исключили HTML-тег и представили его звездочкой(*). В этом случае скрипт будет искать в DOM любой HTML-тег, имеющий атрибут ID со значением ’email_01′. В случае примера 4 мы создали XPath, используя несколько атрибутов для одного HTML-тега.

Использование ‘ИЛИ’ & ‘И’

Как уже упоминалось, эти логические выражения используются при условии атрибутов. В случае ИЛИ любое из условий должно быть истинным или оба, тогда как в случае И оба условия должны быть выполнены. Например, для приведенной ниже структуры DOM XPath с использованием И и ИЛИ может быть записан как:

< input type="email" placeholder="Work Email*" name="email" value="" class="form-control sign-up-input-2 " >
  • Xpath= или]
  • Xpath= и]

В случае ИЛИ если какое-либо из значений атрибута совпадает, элемент будет найден, тогда как в случае И того, и другого значение атрибута должно совпадать и соответствовать, тогда будет найден только элемент. Описанные выше способы были внедрены в приведенный ниже фрагмент кода, где мы пытаемся ввести значения в Страница регистрации лямбда-теста.

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathExampleWithAndOR {

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        System.setProperty("webdriver.chrome.driver", " path to chromedriver ");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://accounts.lambdatest.com/register");

        //Finding the organization field via xpath using OR
        driver.findElement(By.xpath("//input[@name='organization_name' or @placeholder='Organization/Company Name']")).sendKeys("Lambdatest");

        //Finding the full name field via xpath using AND
        driver.findElement(By.xpath("//input[@name='name' and @placeholder='Full Name*']")).sendKeys("Lambdatest");

        //Finding the work email field via xpath using OR, where only one of the attribute defined is correct whereas the other incorrect and does not match, still this should work as one of them meets the condition.
        driver.findElement(By.xpath("//input[@name='email' or @id='not present']")).sendKeys("Lambdatest");

        //Finding the password field via xpath using AND, where only one of the attribute defined is correct whereas the other incorrect and does not match,this should NOT work as one of them does not meets the condition.
        driver.findElement(By.xpath("//input[@name='password' and @id='not present']")).sendKeys("Lambdatest");

    }

}

Ниже приведена ошибка консоли, отображаемая как последний элемент, не найденный, поскольку условия не были выполнены.

Пожалуйста, обратите внимание: Оба “и” и “или” должны быть чувствительны к регистру. В случае, если вы склонны использовать “ИЛИ” или “И”, вы получите сообщение об ошибке в консоли с указанием недопустимого выражения xpath

Использование Содержит()

Этот подход к созданию XPath в Selenium удобен, когда у нас есть часть значений атрибутов, которая динамически изменяется. Например, допустим, идентификатор поля входа, например, email_01, имеет конечный номер, который постоянно меняется при каждой загрузке страницы. В этом случае использование contains помогает нам найти элемент с постоянными именами, например, в данном случае “электронная почта”. Примером создания XPath с содержимым для приведенной ниже структуры DOM является:


  • Xpath=//*[содержит (@заполнитель, ‘Организация)]
  • Xpath=//ввод[содержит (@имя, ‘организация)]
  • Xpath=//*[содержит(@класс, ‘вход для регистрации)]

Здесь, в приведенном выше примере XPath для Selenium, мы использовали такие атрибуты, как заполнитель, имя и т.д., И учитываем частичные значения для идентификации элементов с использованием ключевых слов contains. Приведенный ниже фрагмент кода, в котором подчеркивается использование вышеупомянутого создания XPath, в этом мы нажимаем на кнопку “Начать тестирование” на домашней странице LambdaTest. Упомянутый скриншот:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathContainsExample {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "path to chromedriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.lambdatest.com");

        //Finding the element 'Start testing' having text as same, here we will locate element using contains through xpath
        driver.findElement(By.xpath("//a[contains(text(), 'TESTING')]")).click();

        driver.close()

    }

}

Использование Начинается С()

Это похоже на описанный выше метод contains, единственное отличие заключается в том, что значение сравнения здесь начинается с начального строкового значения. Это полезно, когда для данного атрибута частично изменяются значения. Как и в приведенном выше примере XPath, значение электронной почты изменяется для последних значений. Здесь можно использовать подход “с нуля” для идентификации элемента. Ниже приведены примеры XPath для Selenium, подчеркните использование starts-with для приведенной ниже структуры DOM:


  • Xpath=//ввод[начинается с(@заполнитель, ‘Организация)]
  • Xpath= =//ввод[начинается с(@имя, ‘организация)]

Здесь, в приведенном выше примере, мы использовали два атрибута с ключевым словом starts-with. Скрипт найдет имя тега и совпадет со значением атрибута, начинающимся с “Организация”. Ссылочный фрагмент кода, в котором подчеркивается использование ключевого слова “Начинается с” при поиске элемента через XPath в Selenium. Мы будем использовать тот же пример, что и выше, с той лишь разницей, что мы найдем элемент с помощью starts-with.

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathStartsWithExample {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "path to chromeDriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.lambdatest.com");

        //Finding the element 'Start testing' having text as same, here we will locate element using contains through xpath
        driver.findElement(By.xpath("//a[starts-with(text(), 'START')]")).click();

        driver.close();

    }

}

Использование текста()

Это ключевое слово используется для создания выражений для XPath в Selenium, когда у нас есть текст, определенный в теге HTML, и мы хотим идентифицировать элемент с помощью текста. Это очень удобно, когда другие значения атрибутов динамически изменяются без существенной части значения атрибута, которое можно использовать с помощью Starts-with или Contains. Ниже приведен пример XPath в Selenium, в котором подчеркивается использование текста для следующей структуры DOM:


  • Xpath=]
  • Xpath=//кнопка[содержит(текст(),”Регистрация” )]

В приведенных выше примерах мы использовали текст на кнопке для идентификации элемента. Здесь используются два экземпляра примеров, в одном из которых текст точно совпадает, тогда как в другом текст частично совпадает с использованием ключевого слова contains. Приведенный ниже фрагмент кода, в котором подчеркивается использование ключевого слова text. В этом примере мы будем нажимать на один из блогов на странице Блог лямбда-теста . Ссылка на скриншот ниже:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathWithTextExample {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub


        System.setProperty("webdriver.chrome.driver", "path to the chromedriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.get("https://www.lambdatest.com/blog");


        //Finding the blog with text as 'complete guide on TestNG annotations' element
        driver.findElement(By.xpath("//a[text()='Complete Guide On TestNG Annotations For Selenium WebDriver']")).click();

        driver.close();



    }

}

Использование индекса

Этот подход используется, когда вы хотите указать заданное имя тега в терминах значения индекса, которое вы также хотите найти. Например, рассмотрим КУПОЛ, имеющий несколько входных тегов для каждого отдельного значения поля, и вы хотите ввести текст в 4-е поле. В этом случае вы можете использовать индекс для переключения на заданное имя тега. Например:

Для данной структуры DOM я хочу найти второе поле тега ввода:

  • Xpath=]/ввод[2]

В приведенном выше примере будет выбран локатор с “Полным именем” в качестве поля. Первый входной тег будет проигнорирован, тогда как другой тег будет учитываться из-за упомянутого индекса. Такой подход удобен при работе с данными в таблицах. Например, если у вас несколько строк, вы можете ссылаться на нужную строку с помощью индекса. Ссылочный фрагмент кода с использованием индекса для табличной формы данных для страницы регистрации лямбда-теста, где через класс формы мы переходим к полю “полное имя” с использованием индекса.

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathWithIndex {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\ss251550\\eclipse-workspace_automate\\Automate_Active_MQ_Process\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://accounts.lambdatest.com/register");
        driver.manage().window().maximize();

        //finding the element through index using the reference of the form field containing the fields in it.
        driver.findElement(By.xpath("//div[@class='col-sm-12 google-sign-form']/input[2]")).sendKeys("sadhvi singh");

        driver.close();


    }

}

Использование Цепного XPath В Selenium

Как следует из названия, мы можем использовать несколько выражений XPath и связывать их в цепочку. Например , , в приведенной ниже структуре DOM, ссылающейся на ссылки на домашнюю страницу лямбда-теста:

Здесь мы попытаемся перейти к “Ссылке для входа”. Синтаксис для этого таков.

  • Xpath=//ul[@class=’навигационная панель навигации-навигация]

В приведенном выше примере XPath в Selenium я нашел родительский класс для тегов ссылок, а затем перешел к дочернему классу, используя цепочку для ссылки “вход”. Приведенный выше пример был достигнут с помощью приведенного ниже фрагмента кода.

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathUsingChaining {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "path of chromeDriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.lambdatest.com/");
        driver.manage().window().maximize();

        //locating the 'login' link using xpath chaining and clicking on it.
        driver.findElement(By.xpath("//ul[@class='nav navbar-nav navbar-right']//li[@class='sign-in']")).click();

        //Verifying the current URL on which we post clicking on it.
        String currentURL= driver.getCurrentUrl();
        System.out.println(currentURL);

        driver.close();

    }

}

Вывод на консоль

ЗАПУСКАЙТЕ СВОИ СЦЕНАРИИ SELENIUM В ОБЛАЧНОЙ СЕТКЕ

Более 2000 Браузеров И ОС

БЕСПЛАТНАЯ РЕГИСТРАЦИЯ

Оси XPath

Оси XPath удобны, когда точное имя тега элемента или значение его атрибута являются динамическими и не могут быть использованы для определения местоположения элемента. В этом случае поиск элемента после прохождения через ребенка/родного брата или родителя будет простым подходом. Некоторые из широко используемых осей XPath являются:

  1. Следующее: Эта ось XPath помогает найти элемент, следующий за текущим узлом. Ниже приведена структура DOM страницы регистрации лямбда-теста.

Упомянутый скриншот, выделяющий два элемента ввода, в котором мы попытаемся найти элемент поле “Полное имя” через элемент поле “Организация”

  • Xpath=//ввод[@name=’ имя_организации’]//следующий::ввод[1]
  • Xpath=]//следующий::ввод

В вышеупомянутых примерах первый выберет ввод, следующий за элементом организации, тогда как во втором примере он выберет все элементы, следующие за элементом организации, имеющим входной тег. Это полезно, когда мы намереваемся найти элемент в таблице или когда у нас нет никакого местонахождения следующего элемента из текущего узла. Упомянутый ниже фрагмент кода отображает элементы, расположенные следующим образом. В этом примере мы будем использовать домашнюю страницу теста Lamba, где мы пройдемся по параметрам заголовка меню, используя класс single header. Ссылка на скриншот ниже:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathUsingFollowing {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", " path of chromedriver ");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.lambdatest.com/");
        driver.manage().window().maximize();

        //Locate element with the link blog using following axes
        driver.findElement(By.xpath("//ul[@class='nav navbar-nav navbar-right']//following::li[3]")).click();

        driver.close();

    }

}

2. Следующий брат и сестра: Это одна из концепций, с которой люди склонны путаться. Все, что вы можете прояснить для себя с помощью этой концепции, – это братья и сестры. В случае следования все узлы под текущим узлом являются целевыми, независимо от того, находятся они под (дочерним) контекстным узлом или нет, но следуют ниже контекстного узла. В случае следующих братьев и сестер применимы все последующие узлы контекстного узла, которые имеют одного и того же родителя. В этом случае все братья и сестры называются дочерними элементами родительского узла. Поэтому, если вы ссылаетесь на одного из детей и хотите перейти к другим детям того же родителя, который следует за ним, следующий брат делает свое дело.

Например, используя ссылки на домашнюю страницу лямбда-теста, в приведенной ниже структуре DOM была сделана ссылка на одного из дочерних элементов, и из нее мы перейдем к его братьям и сестрам.

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

  • Xpath=]//следующий брат::li

Ниже приведен фрагмент кода, включающий пример XPath в Selenium.

package ChromeDriver;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathWithFollowingSibling {

    public static void main(String[] args) {
        // TODO Auto-generated method stub'


        System.setProperty("webdriver.chrome.driver", "path of chromeDriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.lambdatest.com/");
        driver.manage().window().maximize();

        //locating the 'sign-up' link using xpath following sibling and clicking on it.
        driver.findElement(By.xpath("//li[@class='sign-in']//following-sibling::li")).click();

        //Verifying the current URL on which we post clicking on it.
        String currentURL= driver.getCurrentUrl();
        System.out.println(currentURL);

        driver.close();


    }

}

Вывод на консоль

3. Предшествующий: Этот метод помогает найти элемент перед текущим узлом, как в предыдущем элементе из текущего узла с XPath в Selenium. Ниже приведена демонстрация структуры DOM.




Ссылка на скриншот ниже:

  • Xpath=//ввод[@имя=’пароль’]//предшествующий::ввод[1]
  • Xpath=//ввод[@имя=’пароль’]//предшествующий::ввод

В вышеупомянутом примере первый найдет элемент с полем “электронная почта”, тогда как другой найдет все элементы перед текущим узлом, т.е. полем пароля. Это также полезно для определения местоположения элементов, которые не могут быть обнаружены никакими способами и могут быть пройдены. Например, в случае кросс-браузерного тестирования иногда некоторые элементы не могут быть распознаны в браузерах IE, устаревших версиях браузеров. В этом случае может быть полезен переход к этим элементам с использованием приоритета или следования. Приведенный ниже пример с фрагментом кода, в котором показано, как, используя ссылку на блог на домашней странице лямбда-теста, мы будем распространяться через вкладку Автоматизация .

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathUsingPreceeding {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "path of chromedriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.lambdatest.com/");
        driver.manage().window().maximize();

        //Fnding the automation link using the blog link
        driver.findElement(By.xpath("//a[text()='Blog']//preceding::li[1]")).click();

        driver.close();

    }

}

4. Предшествующий Брат или Сестра: Это концепция, аналогичная следующему брату, единственная разница в функциональности заключается в функциональности предыдущего. Таким образом, в этом случае вы можете переключаться между братьями и сестрами, но в этом случае вы переключитесь с узла контекста, который был дочерним, и перейдете к предыдущему узлу, который вы хотите найти. Оба ребенка будут иметь одного и того же родителя. Используя тот же пример, что и в следующем разделе, теперь мы перейдем от ссылки регистрации к ссылке входа, используя предыдущий раздел. Синтаксис для того же самого таков

  • Xpath=]//предшествующий брат::li[1]

Примечание: В случае, если вы не укажете индекс родного брата, по которому хотите перемещаться, он может выбрать любой. Для конкретного выбора вам необходимо указать индекс. В случае единственного родственного брата из контекстного узла вам не нужно указывать индекс. Ниже приведен фрагмент кода для того же примера XPath в Selenium.

package ChromeDriver;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathWithPrecedingSibling {

    public static void main(String[] args) {
        // TODO Auto-generated method stub'


        System.setProperty("webdriver.chrome.driver", "path of chromedriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.lambdatest.com/");
        driver.manage().window().maximize();

        //locating the 'login' link using xpath preceding sibling and clicking on it.
        driver.findElement(By.xpath("//li[@class='login']//preceding-sibling::li[1]")).click();

        //Verifying the current URL on which we post clicking on it.
        String currentURL= driver.getCurrentUrl();
        System.out.println(currentURL);

        driver.close();

    }

}

Вывод на консоль

5. Ребенок: Как указано в названии, этот подход используется, когда мы намереваемся найти все дочерние элементы текущего узла. Основным вариантом использования этого подхода может быть, когда мы хотим просмотреть все данные в таблице по строкам, в этом случае мы можем найти все дочерние элементы определенной таблицы. Например, используя приведенную ниже структуру DOM, мы можем создать XPath в Selenium следующим образом:

Упомянутый скриншот того же самого.

  • Xpath=]/дочерний элемент::ввод
  • Xpath=]/дочерний элемент::ввод[1]

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

Ниже приведен фрагмент кода, в котором подчеркивается использование дочерних осей на одном и том же. Мы используем тот же пример регистра на странице регистрации Лямбда-теста .

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathUsingChild {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "path of chrome driver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://accounts.lambdatest.com/register");
        driver.manage().window().maximize();

        //Finding the work email filed using the child locator xpath axes
        driver.findElement(By.xpath("//div[@class='col-sm-12 google-sign-form']/child::input[3]")).sendKeys("sadhvi singh");;

        driver.close();

    }

}

6. Родитель: Этот метод используется для выбора родительского узла текущего узла. Например, для приведенной ниже структуры DOM родительский узел расположен через XPath.

< button type="submit" class=" btn sign-up-btn-2 btn-block">Signup for Free< /button >

Упомянутый скриншот:

  • Xpath=]//родитель::div

В приведенном выше примере родительский элемент расположен через его дочерний элемент. Из поля электронной почты мы переходим к его родительскому узлу. Пожалуйста, обратите внимание, что в случае дочернего XPath учитываются только непосредственные потомки текущего узла, а не внуки. В случае, если текущий узел является корневым узлом, то его родительский узел будет пустым и, следовательно, у него не будет родительских тузов. Ниже приведен фрагмент кода для того же самого:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathUsingParent {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "path of chromedriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
               driver.get("https://accounts.lambdatest.com/register");
               driver.manage().window().maximize();

        //Finding the parent form usnig the password field as the current node.
        WebElement parentDiv=driver.findElement(By.xpath("//input[@name='password']//parent::div"));
        System.out.print(parentDiv.getAttribute("class"));

        driver.close();

    }

}

Вывод на консоль

7. Потомки: Этот подход используется для определения местоположения элемента через XPath для всех дочерних и дочерних элементов текущего узла. Для приведенной ниже структуры DOM потомки XPath в Selenium расположены следующим образом:

Hello! Welcome back

Упомянутый Скриншот:

  • Xpath=]//потомок:: вход

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

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathUsingDescendants {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "path of chromedriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://accounts.lambdatest.com/login");
        driver.manage().window().maximize();

        //Finding the remember me grandchildren of the login form with field value as remember me.
        WebElement rememberMe=driver.findElement(By.xpath("//div[@class='col-lg-3 col-md-4 col-sm-6 sign-form']//descendant::label"));
        rememberMe.click();
        System.out.print(rememberMe.getText());

        driver.close();


    }

}

Вывод на консоль

8. Предки: В этом методе контекстный узел, родитель или его бабушка и дедушка выбираются с помощью осей Предков. Например, для приведенной ниже структуры DOM предок будет определен как:

 

Hello! Welcome back

Упомянутый скриншот:

  • Xpath=//ввод[@имя=’email]//предок::div[1]
  • Xpath=//ввод[@имя=’электронная почта]//предок::форма

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

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class XpathUsingAncestor {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.setProperty("webdriver.chrome.driver", "path of chromedriver");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://accounts.lambdatest.com/login");
        driver.manage().window().maximize();

        //Finding the parent div using the password field of the login page.
        WebElement parentDiv=driver.findElement(By.xpath("//input[@name='password']//ancestor::div[1]"));
        System.out.println(parentDiv.getAttribute("class"));

        WebElement parentForm=driver.findElement(By.xpath("//input[@name='password']//ancestor::form"));
        System.out.println(parentForm.getAttribute("action"));


        driver.close();


    }

}

Вывод на консоль

Вывод

XPath в Selenium помогает человеку находить решения по размещению элементов, когда стандартные процессы не работают. Когда использовать, что важно, когда речь заходит о различных сложностях структуры DOM и функциональных потребностях. Как было определено ранее в моей статье, кросс-браузерное тестирование может быть одной из областей, где вы можете изучить создание XPath в Selenium из-за различного поведения браузера по отношению к элементу DOM. Убедитесь, что какой бы метод вы ни выбрали в случае XPath, он менее подвержен сбоям и делает сценарии более надежными, аккуратными и простыми в обслуживании. Ваше здоровье!

Первоначально опубликовано: Лямбда-тест

Статьи по теме

Поиск Элементов С Текстом Ссылки И Частичным Текстом Ссылки В Selenium

Учебное пособие по Selenium Java – Локатор имен классов В Селене

Оригинал: “https://dev.to/sadhvisingh1/complete-guide-for-using-xpath-in-selenium-with-examples-2656”