Краткое руководство по созданию XPath.docx

https://inlnk.ru/n0Km2A - Руководство по поиску элементов с использованием XPath

Примеры

//li[contains(translate(., 'NATIONAL', 'national'), 'national')] - с разным транслитом

//li[contains(text() , '09.11.1982')] [1] - с индексом

//li[contains(text() , 'замена')]

//*[text()='ТЕКСТ']

//*[contains(text(), 'ТЕКСТ')]

//form[@id='f']//a[@class='test']

div[contains(text() , '90') and contains(text()[2], '%')] - если текст "90" и "%"


В Xpath есть 7 типов узлов, нас интересуют только 3: Элемент, Атрибут, Текст (который мы видим на кнопке, в поле или где-либо еще)

Узел

Вид в DevTools

Синтаксис

Примеры

Элемент - Основной узел,по которому осуществляется поиск


//Элемент[ ]

//div[ ], //span[ ], //button[ ]

Атрибут (или свойство, параметр) элемента и его значение

после знака равно


//Элемент[@Атрибут = 'Значение']

//span[@class = 'ui-button-text']

Но вообще название атрибута можно указать в коде страницы и оно может быть любым

Текст


//Элемент[text() = 'Текст']

//span[text() = 'Войти']

В данном примере мы видим, что в тексте элемента содержатся пробелы, с ними боремся с помощью функции normalize-space() (Дальше по тексту есть примеры по ней)

Далее спецсимволы:

Спецсимвол

Описание

Примеры

*

Соответствует любому узлу элемента

Используем если мы не знаем названия элемента или считаем, что оно будет часто меняться

//*[text() = 'Войти']

@*

Соответствует любому узлу атрибута

Используем если мы не знаем названия атрибута элемента или считаем, что оно будет часто меняться

//span[@*='ui-button-text']

 

Функции Xpath. 

Выделены только строковые функции. (Если нужно что-то еще, то сюда: https://www.hostcms.ru/documentation/step-by-step/xslt/xslt-functions/):

Строковые функции

  • string concat(string, string, …) — возвращает конкатенацию аргументов;
  • boolean contains(string, string) — принимает на вход два строковых аргумента и возвращает true, если первая строка содержит вторую и false в противном случае;
  • string normalize-space(string?) — удаляет начальные и завершающие разделительные символы, нормализует все внутренние идущие подряд разделители в один пробел. Если аргумент опущен, выполняется со строковым значением контекстного узла;
  • boolean starts-with(string, string) — принимает на вход два строковых аргумента и проверяет начинается ли первая строка со второй;
  • string string(object?) — приводит объект к строковому типу явным образом. Если аргумент опущен, то применяется к множеству контекстного узла;
  • number string-length(string?) — возвращает длину переданного ей строкового аргумента. Если аргумент опущен, то применяется к контекстному узлу;
  • string substring(string, number, number?) — возвращает подстроку переданного ей строкового аргумента, начинающуюся с позиции определенной вторым аргументом и длиной, указанной третьим аргументом. Если третий аргумент не передан, то подстрока продолжается до конца строки;
  • string substring-after(string, string) — принимает на вход два строковых аргумента, находит в первой строке вторую и возвращает подстроку, которая за ней следует;
  • string substring-before(string, string) — принимает на вход два строковых аргумента, находит в первой строке вторую и возвращает подстроку, которая ей предшествует;
  • string translate(string, string, string) — производит замену символов первого своего строкового аргумента, которые присутствуют во втором аргументе на соответствующие символы третьего аргумента.

Операторы. Также в xpath можно использовать логические операторы or и and:

К примеру, мы хотим найти элемент span, который имеет id равный 'span1' и содержит текст 'Войти' или 'Войти как'. Мы можем это сделать следующим образом: //span[(text(), 'Войти' or text(),'Войти как') and @id='span1']

(Полный список операторов: https://msiter.ru/tutorials/xpath/operators)

 

Отношения элементов. В xpath есть такие понятия, как: Родитель(/parent:: или /ancestor::), Потомок (/child:: или /descendant::) и Сестра(сестринский элемент), которая может быть ниже или выше (following-sibling или preceding-sibling).

 Отношения с примерами, описаны тут: https://testerslittlehelper.wordpress.com/2016/07/10/real-xpath/ 

 

Чаще всего поиск осуществляется по тексту содержащемуся в элементе, просто потому что текст ищется легче всего, он присутствует практически во всех элементах и меняется не так часто. 

  1. Поиск по тексту внутри элемента:
  2. Обычный поиск. //span[text()='Войти']. Очень часто текст элемента может содержать лишние пробелы, в там случае используем функцию normalize-space().  //span[normalize-space(text())='Войти']
  3. Поиск элемента, содержащего указанный текст. //span[contains(text(),'Войти')]
  4. Поиск содержания текста в начале или в конце. Если со starts-with() все понятно, то с ends-with есть проблемы, данная функция не работает в xpath v1.0. 
    Но есть обходной путь: //div[substring(text(), string-length(text())- string-length('системе') + 1) = 'системе']. Так мы найдем элемент, текст которого заканчивается на "системе"
  5. Поиск элемента (//a[@class='test']) внутри какого-то конкретного элемента (в данном случае форма //form[@id='f'])
    //form[@id='f']//a[@class='test']
  6. Это чувствительно к регистру
    //*[contains(translate(., 'TEST', 'test'), 'test')]


  • Нет меток