XPath в Selenium: как найти и записать? (Текст, Содержит, И)

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

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

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

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

Синтаксис XPath

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

Xpath=//tagname[@attribute='value']

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

Синтаксис XPath
Базовый формат XPath
  • // : Выберите текущий узел.
  • Название тэга: Имя тега конкретного узла.
  • @: Выберите атрибут.
  • Атрибут: Имя атрибута узла.
  • Стоимость: Значение атрибута.

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

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

Типы X-пути

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

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

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

Абсолютный XPath

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

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

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

ПРИМЕЧАНИЕ. Вы можете попрактиковаться в следующем.wing 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

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

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

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

Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]

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

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

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

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

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

Как написать динамический XPath в Selenium WebDriver

1) Базовый XPath

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

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

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

Базовый XPath

Базовый XPath

Еще несколько основных выражений 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='//guru99.com/images/home/java.png']

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

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

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

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

Полное значение «Тип» — «отправить», но используется только частичное значение «суб».

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

Полное значение «name» — «btnLogin», но используется только частичное значение «btn».

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

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

Содержит()

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

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

Содержит()

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

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

Содержит()

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

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

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

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

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

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

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

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

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

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

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

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

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

Идентификатор=»сообщение12″

Идентификатор=»сообщение345″

Идентификатор=»сообщение8769″

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

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

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

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

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

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

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

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

Функция XPath Text()

Методы осей XPath

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

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

1) Фоллоwing

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

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

Фоллоwing

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

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

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

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

Фоллоwing

2) Предок

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

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

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

предок

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

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

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

3) Ребенок

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

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

детей,

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

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

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

4) Предыдущий

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

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

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

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

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

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

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

5) Фоллоwing-брат или сестра

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

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

Фоллоwing-брат или сестра

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

6) Родитель

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

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

Родитель

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

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

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

7) Сам

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

Сам

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

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

8) Потомок

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

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

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

Потомок

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

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

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

Итоги

XPath необходим для поиска элемента на веб-странице и выполнения операции над этим конкретным элементом.

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

Также проверьте: - Учебное пособие по Selenium для начинающих: изучите WebDriver за 7 дней