XPath в Selenium: Руководство
Что такое XPath Selenium?
XPath в Selenium — это путь XML, используемый для навигации по HTML-структуре страницы. Это синтаксис или язык для поиска любого элемента на веб-странице с использованием выражения пути XML. XPath можно использовать как для документов HTML, так и для XML, чтобы найти местоположение любого элемента на веб-странице с использованием структуры HTML DOM.
In Selenium автоматизация: если элементы не найдены с помощью общих локаторов, таких как идентификатор, класс, имя и т. д., то для поиска элемента на веб-странице используется XPath.
В этом уроке мы изучим Xpath и различные выражения XPath для поиска сложных или динамических элементов, атрибуты которых динамически изменяются при обновлении или любых операциях.
Синтаксис XPath
XPath содержит путь к элементу, расположенному на веб-странице. Стандартный синтаксис XPath для создания XPath.
Xpath=//tagname[@attribute='value']
Базовый формат XPath в селене объясняется ниже со снимком экрана.
- // : Выберите текущий узел.
- Название тэга: Имя тега конкретного узла.
- @: Выберите атрибут.
- Атрибут: Имя атрибута узла.
- Значение: Значение атрибута.
Для точного поиска элемента на веб-страницах существуют различные типы локаторов:
Локаторы XPath | Найдите разные элементы на веб-странице |
---|---|
ID | Чтобы найти элемент по идентификатору элемента |
Имя класса | Чтобы найти элемент по имени класса элемента |
Имя | Чтобы найти элемент по имени элемента |
Текст ссылки | Найти элемент по тексту ссылки |
XPath | XPath необходим для поиска динамического элемента и перемещения между различными элементами веб-страницы. |
CSS-путь | Путь CSS также находит элементы, не имеющие имени, класса или идентификатора. |
Типы X-пути
Существует два типа XPath:
1) Абсолютный XPath
2) Относительный XPath
Абсолютный XPath
Это прямой способ найти элемент, но недостаток абсолютного XPath заключается в том, что если в путь к элементу внесены какие-либо изменения, XPath не будет выполнен.
Ключевой характеристикой XPath является то, что он начинается с одинарной косой черты (/), что означает, что вы можете выбрать элемент из корневого узла.
Ниже приведен пример абсолютного выражения Xpath элемента, показанного на экране ниже.
ПРИМЕЧАНИЕ. На этом примере вы можете попрактиковаться в следующем упражнении XPath. https://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 начинается с середины структуры HTML DOM. Он начинается с двойной косой черты (//). Он может искать элементы в любом месте веб-страницы, что означает, что нет необходимости писать длинный xpath, и вы можете начать с середины структуры HTML DOM. Относительный Xpath всегда предпочтителен, поскольку он не является полным путем от корневого элемента.
Ниже приведен пример относительного выражения XPath того же элемента, показанного на экране ниже. Это общий формат, используемый для поиска элемента по XPath.
Нажмите здесь если видео недоступно
Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]
Что такое оси XPath.
Оси XPath выполняют поиск различных узлов в документе XML из текущего контекстного узла. Оси XPath — это методы, используемые для поиска динамических элементов, что в противном случае невозможно с помощью обычного метода XPath, не имеющего идентификатора, имени класса, имени и т. д. XPath в Selenium включает в себя несколько методов, таких как Contains, AND, Absolute XPath и Relative XPath, для идентификации и определения местоположения динамических элементов на основе различных атрибутов и условий.
Методы осей используются для поиска тех элементов, которые динамически изменяются при обновлении или любых других операциях. Существует несколько методов осей, обычно используемых в Selenium Вебдрайвер как ребенок, родитель, предок, брат, сестра, предшественник, я и т. д.
Как записать динамический XPath в Selenium Вебдрайвер
1) Базовый XPath
Выражение XPath выбирает узлы или список узлов на основе таких атрибутов, как Идентификатор, имя, имя классаи т. д. из XML-документа, как показано ниже.
Xpath=//input[@name='uid']
Вот ссылка для доступа к странице https://demo.guru99.com/test/selenium-xpath.html
Еще несколько основных выражений XPath:
Xpath=//input[@type='text'] Xpath=//label[@id='message23'] Xpath=//input[@value='RESET'] Xpath=//*[@class='barone'] Xpath=//a[@href='https://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')]
5) Функция XPath Text()
Территория Функция XPath text() — это встроенная функция веб-драйвера Selenium, которая используется для поиска элементов на основе текста веб-элемента. Это помогает найти точные текстовые элементы и находит элементы в наборе текстовых узлов. Элементы, которые необходимо найти, должны быть в строковой форме.
В этом выражении с помощью текстовой функции мы находим элемент с точным совпадением текста, как показано ниже. В нашем случае мы находим элемент с текстом «UserID».
Xpath=//td[text()='UserID']
Методы осей XPath
Эти методы осей XPath используются для поиска сложных или динамических элементов. Ниже мы рассмотрим некоторые из этих методов.
Для иллюстрации этого метода осей XPath мы будем использовать демонстрационный сайт банка Guru99.
1) Последующие
Выбирает все элементы в документе текущего узла ( ) [поле ввода UserID — это текущий узел], как показано на экране ниже.
Xpath=//*[@type='text']//following::input
Существует 3 «входных» узла, сопоставляемых с использованием «следующей» оси — пароля, входа в систему и кнопки сброса. Если вы хотите сосредоточиться на каком-либо конкретном элементе, вы можете использовать приведенный ниже метод XPath:
Xpath=//*[@type='text']//following::input[1]
Вы можете изменить XPath в соответствии с требованиями, указав [1],[2]………… и так далее.
Если введено значение «1», на снимке экрана ниже найден конкретный узел, который является элементом поля ввода «Пароль».
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) Следующий брат или сестра
Выберите следующих одноуровневых элементов контекстного узла. Братья и сестры находятся на том же уровне текущего узла, как показано на экране ниже. Он найдет элемент после текущего узла.
xpath=//*[@type='submit']//following-sibling::input
Сопоставление одного входного узла с использованием оси «следующий брат».
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 — это методы, используемые для поиска динамических элементов, которые иначе невозможно найти обычным методом XPath.
- Выражение XPath выбирает узлы или список узлов на основе таких атрибутов, как идентификатор, имя, имя класса и т. д. из XML-документа.
Также проверьте: - Selenium Учебник для начинающих: изучите WebDriver за 7 дней