В автоматизации Selenium, если элементы не найдены общими локаторами, такими как id, class, name и т. Д., XPath используется для поиска элемента на веб-странице.
В этом руководстве мы узнаем о xpath и различных выражениях XPath, чтобы найти сложные или динамические элементы, атрибуты которых динамически изменяются при обновлении или любых операциях.
В этом уроке вы узнаете
- Что такое XPath?
- Типы X-path
- Основной XPath
- Содержит()
- Используя OR & AND
- Запускается с функцией
- Текст()
- Методы осей XPath
Что такое XPath?
XPath определяется как путь XML . Это синтаксис или язык для поиска любого элемента на веб-странице с использованием выражения пути XML . XPath используется для поиска местоположения любого элемента на веб-странице, используя структуру HTML DOM. Базовый формат XPath поясняется ниже со снимком экрана.
Синтаксис для 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:
Для относительного Xpath путь начинается с середины структуры HTML DOM. Он начинается с двойной косой черты (//), что означает, что он может искать элемент в любом месте на веб-странице.
Вы можете начать с середины структуры HTML DOM и не нужно писать длинный xpath.
Ниже приведен пример относительного выражения XPath того же элемента, показанного на экране ниже. Это общий формат, используемый для поиска элемента через относительный XPath.
Relative xpath: //*[@class='featured-box']//*[text()='Testing']
Что такое оси XPath.
Оси XPath осуществляют поиск различных узлов в документе XML из текущего узла контекста. Оси XPath — это методы, используемые для поиска динамических элементов, которые в противном случае невозможны обычным методом XPath без идентификатора, имени класса, имени и т. Д.
Методы осей используются для поиска тех элементов, которые динамически изменяются при обновлении или любых других операциях. В Selenium Webdriver существует несколько методов осей, таких как дочерний, родительский, родительский, родственный, собственный, и т. Д.
Использование XPath Обработка сложных и динамических элементов в Selenium
1) Базовый XPath:
Выражение XPath выбирает узлы или список узлов на основе таких атрибутов, как ID, имя, имя класса и т. Д. Из документа XML, как показано ниже.
Xpath=//input[@name='uid']
Вот ссылка для доступа к странице http://demo.guru99.com/v1/
Некоторые более простые выражения 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.
Аналогично, в приведенном ниже выражении мы взяли «id» как атрибут и «message» как частичное значение. При этом будут найдены 2 элемента («ИД пользователя не должен быть пустым» и «Пароль не должен быть пустым»), поскольку его атрибут «имя» начинается с «сообщения».
Xpath=//*[contains(@id,'message')]
В приведенном ниже выражении мы взяли «текст» ссылки как атрибут, а «здесь» — как частичное значение, как показано на скриншоте ниже. Это найдет ссылку («здесь»), так как отображает текст «здесь».
Xpath=//*[contains(text(),'here')] Xpath=//*[contains(@href,'guru99.com')]
3) Использование OR & AND:
В выражении OR используются два условия, должно ли быть выполнено 1-е условие ИЛИ 2-е условие. Это также применимо, если выполняется одно условие или, возможно, оба. Означает, что любое условие должно быть истинным, чтобы найти элемент.
В приведенном ниже выражении XPath оно идентифицирует элементы, чьи единственные или оба условия выполняются.
Xpath=//*[@type='submit' or @name='btnReset']
Выделение обоих элементов как элемента «LOGIN» с атрибутом «type» и элемента «RESET» с атрибутом «name».
В выражении AND используются два условия, оба условия должны быть истинными, чтобы найти элемент. Не удается найти элемент, если какое-либо одно условие ложно.
Xpath=//input[@type='submit' and @name='btnLogin']
В приведенном ниже выражении выделен элемент «LOGIN», так как он имеет атрибуты «type» и «name».
4) Начинается с функцией:
Функция startts-with находит элемент, значение атрибута которого
изменения при обновлении или любой операции на веб-странице. В этом выражении соответствие начального текста атрибута используется для поиска элемента, атрибут которого изменяется динамически. Вы также можете найти элемент, значение атрибута которого является статическим (не изменяется).
Например: предположим, что идентификатор конкретного элемента изменяется динамически, например:
Id = «message12»
Id = «message345»
Id = «message8769»
и так далее .. но первоначальный текст такой же. В этом случае мы используем выражение Start-with.
В приведенном ниже выражении есть два элемента с идентификатором, начинающимся с «message» (т. Е. «Идентификатор пользователя не должен быть пустым» и «пароль не должен быть пустым»). В приведенном ниже примере XPath находит те элементы, чей «ID» начинается с «message».
Xpath=//label[starts-with(@id,'message')]
5) Текст ():
В этом выражении с помощью текстовой функции мы находим элемент с точным совпадением текста, как показано ниже. В нашем случае мы находим элемент с текстом «UserID».
Xpath=//td[text()='UserID']
6) Методы осей XPath:
Эти методы осей XPath используются для поиска сложных или динамических элементов. Ниже мы увидим некоторые из этих методов.
Для иллюстрации этого метода осей XPath мы будем использовать демонстрационный сайт банка Guru99.
а) следующие:
Выбирает все элементы в документе текущего узла () [поле ввода UserID является текущим узлом], как показано на экране ниже.
Xpath=//*[@type='text']//following::input
Есть 3 «входных» узла, соответствующих с помощью «следующего» оси-пароля, кнопки входа и сброса. Если вы хотите сфокусироваться на каком-либо конкретном элементе, вы можете использовать следующий метод XPath:
Xpath=//*[@type='text']//following::input[1]
Вы можете изменить XPath в соответствии с требованиями, указав [1], [2] ………… и так далее.
Если введено значение «1», снимок экрана ниже находит конкретный узел, который является элементом поля ввода «Пароль».
б) предок:
Ось предка выбирает все элементы предка (дед, родитель и т. Д.) Текущего узла, как показано на экране ниже.
In the below expression, we are finding ancestors element of the current node(«ENTERPRISE TESTING» node).
Xpath=//*[text()='Enterprise Testing']//ancestor::div
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
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
Есть 2 «входных» узла, совпадающих с использованием «предыдущей» оси. Если вы хотите сосредоточиться на каком-либо конкретном элементе, вы можете использовать приведенный ниже XPath:
Xpath=//*[@type='submit']//preceding::input[1]
Вы можете изменить xpath в соответствии с требованием, указав [1], [2] ………… и так далее.
е) следующий брат / сестра:
Выберите следующие братья и сестры контекстного узла. Братья и сестры находятся на том же уровне текущего узла, как показано на экране ниже. Он найдет элемент после текущего узла.
xpath=//*[@type='submit']//following-sibling::input
Один входной узел совпадает с помощью оси «follow-sibling».
е) Родитель:
Выбирает родителя текущего узла, как показано на экране ниже.
Xpath=//*[@id='rt-feature']//parent::div
Существует 65 узлов «div», соответствующих оси «parent». Если вы хотите сосредоточиться на каком-либо конкретном элементе, вы можете использовать приведенный ниже XPath:
Xpath=//*[@id='rt-feature']//parent::div[1]
Вы можете изменить XPath в соответствии с требованиями, указав [1], [2] ………… и так далее.
г) Я:
Выбирает текущий узел или «self» означает, что он указывает сам узел, как показано на экране ниже.
Сопоставление одного узла с использованием оси «self». Он всегда находит только один узел, так как представляет собственный элемент.
Xpath =//*[@type='password']//self::input
h) Потомок:
Выбирает потомков текущего узла, как показано на экране ниже.
В приведенном ниже выражении он идентифицирует всех потомков элемента к текущему элементу (элемент кадра ‘Main body Surround’), что означает вниз под узлом (дочерний узел, узел внука и т. Д.).
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.