XPath в Selenium WebDriver Tutorial: как найти XPath?

Содержание:

Anonim

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

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

В этом руководстве по XPath вы узнаете:

  • Что такое XPath?
  • Типы X-path
    • Абсолютный XPath
    • Относительный XPath
  • Базовый XPath
  • Содержит()
  • Использование ИЛИ и И
  • Начинается с функции
  • Текст()
  • Методы осей XPath
    • Следующий
    • Предок
    • Ребенок
    • Предшествующий
    • Следующий брат
    • Родитель
    • Себя
    • Потомок

Что такое XPath в Selenium?

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

Базовый формат XPath в селене поясняется ниже на снимке экрана.

Базовый формат XPath

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

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

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

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

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

Типы X-path

Есть два типа XPath:

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

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

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

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

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

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

ПРИМЕЧАНИЕ. Вы можете попрактиковаться в следующем упражнении XPath на этом http://demo.guru99.com/test/selenium-xpath.html.

Нажмите здесь, если видео недоступно

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

/ html / body / div [2] / div [1] / div / h4 [1] / b / html [1] / body [1] / div [2] / div [1] / div [1] / h4 [1] / b [1]

Абсолютный XPath

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

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

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

Нажмите здесь, если видео недоступно

Относительный XPath: // div [@ class = 'Feature-box cloumnsize1'] // h4 [1] // b [1]

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

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

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

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

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

1) Базовый XPath:

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

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

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

Базовый XPath

Еще несколько основных выражений xpath:

Xpath = // input [@ type = 'text']Xpath = // метка [@ 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.webp ']

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

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

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

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

Полное значение «Тип» - «отправить», но с использованием только частичного значения «sub».

Xpath = // * [содержит (@ type, 'sub')] 

Полное значение 'name' - 'btnLogin', но с использованием только частичного значения 'btn'.

Xpath = // * [содержит (@ name, 'btn')]

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

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

Xpath = // * [содержит (@ id, 'message')] 

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

Xpath = // * [содержит (текст (), 'здесь')]Xpath = // * [содержит (@ href, 'guru99.com')] 

3) Использование ИЛИ и И:

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

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

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

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

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

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

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

4) Xpath начинается с

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

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

Id = "message12"

Id = "message345"

Id = "message8769"

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

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

Xpath = // метка [начинается с (@ id, 'message')]

5) Функция XPath Text ()

Функция XPath text () - это встроенная функция selenium webdriver, которая используется для поиска элементов на основе текста веб-элемента. Это помогает найти точные текстовые элементы и находит элементы в наборе текстовых узлов. Расположенные элементы должны быть в строковой форме.

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

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

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

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

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

а) После:

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

Xpath = // * [@ type = 'text'] // после :: input

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

Xpath = // * [@ type = 'text'] // после :: input [1]

Вы можете изменить XPath в соответствии с требованиями, поместив [1], [2]

… и так далее.

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

б) Предок:

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

В приведенном ниже выражении мы находим элемент предков текущего узла (узел «ENTERPRISE TESTING»).

Xpath = // * [text () = 'Enterprise Testing'] // предок :: div

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

Xpath = // * [text () = 'Enterprise Testing'] // предок :: div [1]

Вы можете изменить XPath в соответствии с требованиями, поместив [1], [2]

… и так далее.

в) Ребенок:

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

Xpath = // * [@ id = 'java_technologies'] // потомок :: li

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

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

Вы можете изменить xpath в соответствии с требованиями, поместив [1], [2]

… и так далее.

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

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

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

Xpath = // * [@ type = 'submit'] // предшествующий :: input

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

Xpath = // * [@ type = 'submit'] // предшествующий :: input [1]

Вы можете изменить xpath в соответствии с требованиями, поместив [1], [2]

… и так далее.

д) Следующие братья и сестры:

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

 xpath = // * [@ type = 'submit'] // следующий-sibling :: input

Сопоставление одного входного узла с помощью оси «следующий-брат».

е) Родитель:

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

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

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

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

Вы можете изменить XPath в соответствии с требованиями, поместив [1], [2]

… и так далее.

ж) Самостоятельная:

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

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

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

з) Потомок:

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

В приведенном ниже выражении он определяет всех элементов, являющихся потомками текущего элемента (элемент кадра «Основное окружение»), что означает, что находится ниже узла (дочерний узел, узел внука и т. Д.).

Xpath = // * [@ id = 'rt-feature'] // потомок :: a

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

Xpath = // * [@ id = 'rt-feature'] // потомок :: a [1]

Вы можете изменить XPath в соответствии с требованиями, поместив [1], [2]

… и так далее.

Резюме:

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

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