В автоматизированном тестировании решающее значение имеет использование Selenium для поиска элементов веб-страницы. XPath — это мощный метод позиционирования, который позволяет точно позиционировать элемент по его пути, независимо от его положения в DOM (объектной модели документа).
element_xpath = driver.find_element(By.XPATH, 'xpathвыражение')
xpath — это язык путей XML (язык путей XML), определенный Международной организацией по стандартизации W3C. Это язык, используемый для определения местоположения узлов XML-документа.
1. По сравнению с другими методами позиционирования он может поддерживать больше методов позиционирования, таких как логическое суждение, нечеткое позиционирование и т. д.
2. Может поддерживать позиционирование в Интернете и позиционирование на собственной странице приложения Android.
1. Нужно парсить всю страницу от начала до конца, а это медленно
Способ 1: В элементах режима разработчика браузера введите выражение xpath в строку поиска Ctrl+F.
Способ 2: В консоли режима разработчика браузера выражение можно проверить в следующем формате
$x("xpathвыражение") # В выражениях есть кавычки,затем используйте одинарные кавычки,'$' можно заменить на '$$'
В XPath существует семь типов узлов: элементы, атрибуты, текст, пространства имен, инструкции обработки, комментарии и узлы документов (или корневые узлы).
Прежде чем приступить к синтаксису xpath, нам нужно кратко понять эти типы узлов:
Имя узла | иллюстрировать | Пример |
---|---|---|
узел элемента | теги на веб-странице | нравиться\<textarea>...\</textarea>、\<p>...\</p> |
корневой узел | Первый узел элемента веб-страницы | корневой веб-страницы узел Обычно\<html>...\<html> |
узел атрибута | Каждый атрибут в теге | нравиться\<div id='su' >...\</div>,Идентификатор — это свойство узла div. |
текстовый узел | текст метки | нравиться\<div>Ла ла ла\</div>,«Ла-ла-ла» — это текст узла div. |
<font color='red'>xpathиспользовать путьвыражение Опишите связь между целевым узлом и заголовком веб-страницы.</font>
Выражения пути имеют две структуры, а именно:
Сравнивая два выражения, мы можем найти:
<font color='red'>поэтому,Почти всегда используется в проектахотносительный путь Позиционирование</font>
выражение | иллюстрировать | Пример | Примериллюстрировать |
---|---|---|---|
nodename | Выберите все дочерние узлы этого узла | html | Выбирать\<html>корневой Все дочерние узлы узла |
/ | Выберите из корневого узла или используйте его для выбора дочерних узлов. | /html/body/textarea | выбирать\<body>все в\<textarea>дочерний узел |
// | Выберите, начиная с соответствующего узла, или выберите узлы-потомки. | /html/body//textarea | выбирать\<body>все в\<textarea>Узлы-потомки |
| | Выберите несколько узлов | //div|//a | выбиратьвсе\<div>сумма узлов\<a>узел |
.. | Выберите родительский узел текущего узла | //p/.. | выбиратьвсе\<p>изродительский узел |
* | Выбрать все узлы | /html/body/* | выбирать\<body>все вузел |
Выражение-предикат (предикат): выражение, следующее сразу за узлом и встроенное в [], которое можно использовать для фильтрации нескольких узлов с одинаковым именем.
Принцип работы выражения предиката: получить информацию об узле, оценить, соответствует ли узел требованиям с помощью выражения, и вернуть узел, если оно истинно.
Формат предиката:
Имя узел [сказуемое]
Часто используемые предикаты | иллюстрировать | Пример | Примериллюстрировать |
---|---|---|---|
n | Номер узла | //div2 | выбиратьвсе\<div>узели<font color='red'>Долженузелявляется его родителемизвторойиндивидуальный\<div>узел</font> |
last() | последний узел | //divlast() | выбиратьвсе\<div>узели<font color='red'>Долженузелявляется его родителемизпоследнийиндивидуальныйдочерний узел</font> |
position() | Сравните номера узлов | //divposition() < 3 | выбиратьвсе\<div>узели<font color='red'>Долженузелявляется его родителемизпервые дваиндивидуальный\<div>узел</font> |
@свойство | свойство | //input@id | выбиратьвсе\<input>узели Долженузелприноситьidсвойство |
@property='стоимость недвижимости' | Сравнить свойства | //input@id='kw' | выбиратьвсе\<input>узели Долженузелidсвойстводля'kw' |
text() | Сравнить текст узла | //atext()='Новости' | выбиратьвсе\<a>узели Долженузелтекстдля'новости' |
оператор предиката | иллюстрировать | Пример | Примериллюстрировать |
---|---|---|---|
= != > < >= <= | сравнение размеров | /html/body/divposition()=2 | выбирать\<body>серединаиз Нет.2индивидуальный\<div>дочерний узел |
+ - *、 div mod | Сложение, вычитание, умножение и деление для нахождения остатка | /html/body/divlast()-1 | выбирать\<body>серединаиз倒数Нет.2индивидуальный\<div>дочерний узел |
and or not() | Операции ИЛИ, И, НЕ | //*@id='kw' and @class='s_ipt' | Выберите все узлы с id='kw' и class='s_ipt'. |
contains() | Включать | //*содержит(text(), 'Новости') | Выберите все узлы со словом «новости» в тексте. |
starts-with() | Заголовок содержит | //*starts-with(@id, 's') | Выберите все узлы, текст которых начинается с «новостей». |
Примечание:
Ось: представляет связь дерева между выбранным узлом и текущим узлом, используемую для фильтрации типов узлов, которые имеют ту же связь с текущим узлом.
Формат оси:
текущий узел/осьимя::Имя узла
ось | иллюстрировать | Пример | Примериллюстрировать |
---|---|---|---|
ancestor | Родительский узел | //input@id='kw'/ancestor::\ * | выбиратьid='kw'из\<input>узелизвсе Родительский узел |
ancestor-or-self | Узлы-предки и текущие узлы | немного | немного |
attribute | узелсвойство | немного | немного |
child | Дочерний узел, эквивалентный / | /html/body/child::div | выбирать\<body>все в\<div>дочерний узел |
descendant | Узлы-потомки, эквивалентные // | /html/body/descendant::div | выбирать\<body>все в\<div>Узлы-потомки |
descendant-or-self | Узлы-потомки и текущий узел | немного | немного |
following | Все узлы после конечного тега | немного | немного |
namespace | пространство имен | немного | немного |
parent | родительский узел | немного | немного |
preceding | Все узлы до начальной метки | немного | немного |
preceding-sibling | Все одноуровневые узлы перед текущим узлом | немного | немного |
self | текущий узел | немного | немного |
XPath — мощный инструмент, но его следует использовать с осторожностью, поскольку метод Xpath находит элементы медленно. Как правило, другие методы позиционирования предпочтительнее, я надеюсь, что эта статья поможет вам.