Учебники

14) XPath в селене

В автоматизации Selenium, если элементы не найдены общими локаторами, такими как id, class, name и т. Д., XPath используется для поиска элемента на веб-странице.

В этом руководстве мы узнаем о xpath и различных выражениях XPath, чтобы найти сложные или динамические элементы, атрибуты которых динамически изменяются при обновлении или любых операциях.

В этом уроке вы узнаете

Что такое XPath?

XPath определяется как путь XML . Это синтаксис или язык для поиска любого элемента на веб-странице с использованием выражения пути XML . XPath используется для поиска местоположения любого элемента на веб-странице, используя структуру HTML DOM. Базовый формат XPath поясняется ниже со снимком экрана.

XPath в Selenium WebDriver: полное руководство

Синтаксис для XPath:

XPath содержит путь к элементу, расположенному на веб-странице. Стандартный синтаксис для создания XPath есть.

Xpath=//tagname[@attribute='value']
  • //: Выбрать текущий узел.
  • Tagname: тэг определенного узла.
  • @: Выберите атрибут.
  • Атрибут: имя атрибута узла.
  • Значение: значение атрибута.

Чтобы точно найти элемент на веб-страницах, существуют разные типы локаторов:

XPath Локаторы Найти различные элементы на веб-странице
Я БЫ Найти элемент по идентификатору элемента
Classname Чтобы найти элемент по Classname элемента
имя Чтобы найти элемент по имени элемента
Текст ссылки Найти элемент по тексту ссылки
XPath XPath требуется для поиска динамического элемента и перемещения между различными элементами веб-страницы
CSS путь Путь CSS также находит элементы, не имеющие имени, класса или идентификатора.

Типы X-path

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

1) Абсолютный XPath

2) Относительный XPath

Абсолютный XPath:

Это прямой способ найти элемент, но недостатком абсолютного XPath является то, что если в пути к элементу вносятся какие-либо изменения, то XPath не работает.

Ключевой характеристикой XPath является то, что он начинается с одиночной косой черты (/), что означает, что вы можете выбрать элемент из корневого узла.

Ниже приведен пример абсолютного выражения xpath элемента, показанного на экране ниже.

Абсолютный xpath:

html/body/div[1]/section/div[1]/div/div/div/div[1]/div/div/div/div/div[3]/div[1]/div/h4[1]/b

XPath в Selenium WebDriver: полное руководство

Относительный xpath:

Для относительного Xpath путь начинается с середины структуры HTML DOM. Он начинается с двойной косой черты (//), что означает, что он может искать элемент в любом месте на веб-странице.

Вы можете начать с середины структуры HTML DOM и не нужно писать длинный xpath.

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

Relative xpath: //*[@class='featured-box']//*[text()='Testing']

XPath в Selenium WebDriver: полное руководство

Что такое оси XPath.

Оси XPath осуществляют поиск различных узлов в документе XML из текущего узла контекста. Оси XPath — это методы, используемые для поиска динамических элементов, которые в противном случае невозможны обычным методом XPath без идентификатора, имени класса, имени и т. Д.

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

Использование XPath Обработка сложных и динамических элементов в Selenium

1) Базовый XPath:

Выражение XPath выбирает узлы или список узлов на основе таких атрибутов, как ID, имя, имя класса и т. Д. Из документа XML, как показано ниже.

Xpath=//input[@name='uid']

Вот ссылка для доступа к странице http://demo.guru99.com/v1/

XPath в Selenium WebDriver: полное руководство

Некоторые более простые выражения xpath:

Xpath=//input[@type='text']				
Xpath=	//label[@id='message23']
Xpath=	//input[@value='RESET']
Xpath=//*[@class='barone']
Xpath=//a[@href='http://demo.guru99.com/']
Xpath= //img[@src='//cdn.guru99.com/images/home/java.png']

2) Содержит ():

Contains () — это метод, используемый в выражении XPath. Он используется, когда значение любого атрибута изменяется динамически, например, информация для входа.

Функция содержит возможность найти элемент с частичным текстом, как показано в примере ниже.

В этом примере мы попытались идентифицировать элемент, просто используя частичное текстовое значение атрибута. В приведенном ниже выражении XPath вместо кнопки «Отправить» используется частичное значение «sub». Можно заметить, что элемент найден успешно.

Полное значение ‘Type’ равно ‘submit’, но используется только частичное значение ‘sub’.

Xpath=//*[contains(@type,'sub')]  

Полное значение ‘name’ равно ‘btnLogin’, но используется только частичное значение ‘btn’.

Xpath=//*[contains(@name,'btn')]

В вышеприведенном выражении мы взяли «name» в качестве атрибута и «btn» в качестве частичного значения, как показано на скриншоте ниже. Это позволит найти 2 элемента (LOGIN & RESET), поскольку их атрибут name начинается с btn.

XPath в Selenium WebDriver: полное руководство

Аналогично, в приведенном ниже выражении мы взяли «id» как атрибут и «message» как частичное значение. При этом будут найдены 2 элемента («ИД пользователя не должен быть пустым» и «Пароль не должен быть пустым»), поскольку его атрибут «имя» начинается с «сообщения».

Xpath=//*[contains(@id,'message')]				

XPath в Selenium WebDriver: полное руководство

В приведенном ниже выражении мы взяли «текст» ссылки как атрибут, а «здесь» — как частичное значение, как показано на скриншоте ниже. Это найдет ссылку («здесь»), так как отображает текст «здесь».

Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]				

XPath в Selenium WebDriver: полное руководство

3) Использование OR & AND:

В выражении OR используются два условия, должно ли быть выполнено 1-е условие ИЛИ 2-е условие. Это также применимо, если выполняется одно условие или, возможно, оба. Означает, что любое условие должно быть истинным, чтобы найти элемент.

В приведенном ниже выражении XPath оно идентифицирует элементы, чьи единственные или оба условия выполняются.

Xpath=//*[@type='submit' or @name='btnReset']

Выделение обоих элементов как элемента «LOGIN» с атрибутом «type» и элемента «RESET» с атрибутом «name».

XPath в Selenium WebDriver: полное руководство

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

Xpath=//input[@type='submit' and @name='btnLogin']

В приведенном ниже выражении выделен элемент «LOGIN», так как он имеет атрибуты «type» и «name».

XPath в Selenium WebDriver: полное руководство

4) Начинается с функцией:

Функция startts-with находит элемент, значение атрибута которого

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

Например: предположим, что идентификатор конкретного элемента изменяется динамически, например:

Id = «message12»

Id = «message345»

Id = «message8769»

и так далее .. но первоначальный текст такой же. В этом случае мы используем выражение Start-with.

В приведенном ниже выражении есть два элемента с идентификатором, начинающимся с «message» (т. Е. «Идентификатор пользователя не должен быть пустым» и «пароль не должен быть пустым»). В приведенном ниже примере XPath находит те элементы, чей «ID» начинается с «message».

Xpath=//label[starts-with(@id,'message')]

XPath в Selenium WebDriver: полное руководство

5) Текст ():

В этом выражении с помощью текстовой функции мы находим элемент с точным совпадением текста, как показано ниже. В нашем случае мы находим элемент с текстом «UserID».

Xpath=//td[text()='UserID']				

XPath в Selenium WebDriver: полное руководство

6) Методы осей XPath:

Эти методы осей XPath используются для поиска сложных или динамических элементов. Ниже мы увидим некоторые из этих методов.

Для иллюстрации этого метода осей XPath мы будем использовать демонстрационный сайт банка Guru99.

а) следующие:

Выбирает все элементы в документе текущего узла () [поле ввода UserID является текущим узлом], как показано на экране ниже.

Xpath=//*[@type='text']//following::input

XPath в Selenium WebDriver: полное руководство

Есть 3 «входных» узла, соответствующих с помощью «следующего» оси-пароля, кнопки входа и сброса. Если вы хотите сфокусироваться на каком-либо конкретном элементе, вы можете использовать следующий метод XPath:

Xpath=//*[@type='text']//following::input[1]

Вы можете изменить XPath в соответствии с требованиями, указав [1], [2] ………… и так далее.

Если введено значение «1», снимок экрана ниже находит конкретный узел, который является элементом поля ввода «Пароль».

XPath в Selenium WebDriver: полное руководство

б) предок:

Ось предка выбирает все элементы предка (дед, родитель и т. Д.) Текущего узла, как показано на экране ниже.

In the below expression, we are finding ancestors element of the current node(«ENTERPRISE TESTING» node).

Xpath=//*[text()='Enterprise Testing']//ancestor::div

XPath в Selenium WebDriver: полное руководство

There are 13 «div» nodes matching by using «ancestor» axis. If you want to focus on any particular element then you can use the below XPath, where you change the number 1, 2 as per your requirement:

Xpath=//*[text()='Enterprise Testing']//ancestor::div[1]

You can change the XPath according to the requirement by putting [1], [2]…………and so on.

c) Child:

Selects all children elements of the current node (Java) as shown in the below screen.

Xpath=//*[@id='java_technologies']//child::li

XPath в Selenium WebDriver: полное руководство

There are 71 «li» nodes matching by using «child» axis. If you want to focus on any particular element then you can use the below xpath:

Xpath=//*[@id='java_technologies']/child::li[1]

Вы можете изменить xpath в соответствии с требованием, указав [1], [2] ………… и так далее.

г) предшествующий:

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

В приведенном ниже выражении он идентифицирует все элементы ввода перед кнопкой «LOGIN», которая является идентификатором пользователя и элементом ввода пароля .

Xpath=//*[@type='submit']//preceding::input

XPath в Selenium WebDriver: полное руководство

Есть 2 «входных» узла, совпадающих с использованием «предыдущей» оси. Если вы хотите сосредоточиться на каком-либо конкретном элементе, вы можете использовать приведенный ниже XPath:

Xpath=//*[@type='submit']//preceding::input[1]

Вы можете изменить xpath в соответствии с требованием, указав [1], [2] ………… и так далее.

е) следующий брат / сестра:

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

 xpath=//*[@type='submit']//following-sibling::input

XPath в Selenium WebDriver: полное руководство

Один входной узел совпадает с помощью оси «follow-sibling».

е) Родитель:

Выбирает родителя текущего узла, как показано на экране ниже.

Xpath=//*[@id='rt-feature']//parent::div

XPath в Selenium WebDriver: полное руководство

Существует 65 узлов «div», соответствующих оси «parent». Если вы хотите сосредоточиться на каком-либо конкретном элементе, вы можете использовать приведенный ниже XPath:

Xpath=//*[@id='rt-feature']//parent::div[1]

Вы можете изменить XPath в соответствии с требованиями, указав [1], [2] ………… и так далее.

г) Я:

Выбирает текущий узел или «self» означает, что он указывает сам узел, как показано на экране ниже.

XPath в Selenium WebDriver: полное руководство

Сопоставление одного узла с использованием оси «self». Он всегда находит только один узел, так как представляет собственный элемент.

Xpath =//*[@type='password']//self::input

h) Потомок:

Выбирает потомков текущего узла, как показано на экране ниже.

В приведенном ниже выражении он идентифицирует всех потомков элемента к текущему элементу (элемент кадра ‘Main body Surround’), что означает вниз под узлом (дочерний узел, узел внука и т. Д.).

Xpath=//*[@id='rt-feature']//descendant::a

XPath в Selenium WebDriver: полное руководство

Имеется 12 узлов «связи», соответствующих оси «потомок». Если вы хотите сосредоточиться на каком-либо конкретном элементе, вы можете использовать приведенный ниже XPath:

Xpath=//*[@id='rt-feature']//descendant::a[1]

Вы можете изменить XPath в соответствии с требованиями, указав [1], [2] ………… и так далее.

Резюме:

XPath требуется найти элемент на веб-странице, чтобы выполнить операцию над этим конкретным элементом.

  • Существует два типа XPath:
    • Абсолют XPath
    • Относительный XPath
  • Оси XPath — это методы, используемые для поиска динамических элементов, которые невозможно найти обычным методом XPath.
  • Выражение XPath выбирает узлы или список узлов на основе таких атрибутов, как идентификатор, имя, имя класса и т. Д. Из документа XML.