SlideShare una empresa de Scribd logo
1 de 57
Докладчик 
Кожухов Илья, 
Специалист по качеству 
k.i.a88@mail.ru 
Skype: ra_007
1 
0% 
1. Вводная часть 
• термины, определения 
• XPath в браузере 
2. Язык XPath 
3. Построение локаторов в Selenium
Терминология 
• XPath – язык запросов к элементам XML-документа 
• Selenium WebDriver – инструмент для 
автоматизированного управления браузерами 
• Локатор – строка, уникально идентифицирующая 
элемент веб-страницы
Локаторы в Selenium 
Инженер по тестированию задает в Selenium 
последовательность действий 
• Открыть страницу 
• Произвести действие 
• Проверить результат
Локаторы в Selenium 
С помощью локаторов Selenium «понимает» с 
каким веб-элементом производить действие 
id Локатор 
name 
CSS 
XPath 
className 
tagName linkText 
partialLinkText
XPath 
• XML – расширяемый язык разметки 
• XPath – путь к элементу xml 
• HTML – язык разметки Web-документа 
• DOM – объектная модель документа, в 
частности HTML 
• XPath – осуществляет навигацию по DOM
Артефакты DOM 
Элемент 
<div id="create" > Создать </div> 
Атрибут Текст
XPath в FireFox 
FireBug 
https://addons.mozilla.org/ru/firefox/addon/firebug 
FirePath 
https://addons.mozilla.org/ru/firefox/addon/firepath
в
XPath в Chrome 
Инструменты разработчика 
Elements 
Ctrl + F 
Вызвать Инструменты разработчика: 
• F12 
• Ctrl+Shift+I 
• Настройки – Инструменты – 
Инструменты разработчика
XPath в консоли браузера 
• $x(path) – принимает ХPath в качеств 
параметра и возвращает массив элементов 
• $0 … $4 – доступ к последним вызванным 
DOM - элементам
15% 
1. Вводная часть 
2. Язык XPath 
2 
• абсолютный путь 
• относительный путь 
• условия 
• оси 
• функции 
• операторы 
3. Построение локаторов в Selenium
XPath. Абсолютный путь 
A/B/C 
<A> 
<B> 
<C/> 
</B> 
</A> 
Путь от корневого элемента 
XPath 
XML
Если использовать только 
абсолютный путь
XPath. Относительный путь 
<A> 
//C 
<B> 
<C/> 
</B> 
</A> 
Относительный путь не учитывает промежуточные элементы
XPath. Относительный путь 
<A> 
<B> 
<C> </C> 
<C> </C> 
</B> 
</A> 
//C 
Может быть несколько элементов
<A> 
<B> 
XPath. Условия 
<C> </C> 
<C> </C> 
</B> 
</A> 
//C[1] 
В скобках [] заключены условия выборки
XPath. @ - атрибут 
//C[@id] 
<A> 
<B> 
<C id> </C> 
<C> </C> 
</B> 
</A> 
Будут выбраны все элементы, имеющие атрибут "id"
XPath. @ - атрибут 
//C[@id="one"] 
<A> 
<B> 
<C id="one"> </C> 
<C id="two"> </C> 
</B> 
</A> 
Значение атрибута можно сравнивать
XPath. * - любой 
<A> 
<B id> 
<C id> </C> 
<C> </C> 
</B> 
</A> 
//*[@id] 
Любой элемент
XPath. * - любой 
<A> 
<B> 
<C id> </C> 
<C name> </C> 
<C></C> 
</B> 
</A> 
//C[@*] 
Любой атрибут
Как быть в этом случае? 
??? 
<div id="name">Имя: </div> 
<input type="text"> 
<div id="second_name">Фамилия: </div> 
<input type="text"> 
Каким XPath найти input для ввода имени?
XPath. Оси 
//div[@id="name"]/following-sibling::input[1] 
<div id="name">Имя: </div> 
<input type="text"> 
<div id="second_name">Фамилия: </div> 
<input type="text"> 
С помощью осей осуществляется навигация по узлам XML документа
XPath. Оси. Сокращения 
• attribute:: — можно заменить на «@» 
• child:: — часто просто опускают 
• descendant:: — можно заменить на «.//» 
• parent:: — можно заменить на «..» 
• self:: — можно заменить на «.»
XPath. Функции 
Функции позволяют использовать результат операций с множеством нод, строками, 
числами и логическими операторами в XPath выражених
XPath. Функции. text() 
//C[text()="Доброе утро!"] 
<A> 
<B> 
<C>Доброе утро!</C> 
<C>Злое утро!</C> 
</B> 
</A> 
Функция text() возвращает набор текстовых нод
XPath. Функции. contains() 
//C[contains(text(), "утро")] 
<A> 
<B> 
<C>Доброе утро!</C> 
<C>Злое утро!</C> 
</B> 
</A> 
Строковая функция contains() возвращает истину, 
если первая строка содержит вторую
XPath. Функции. contains() 
//C[contains(@id, "name")] 
<A> 
<B> 
<C id="name"></C> 
<C id="second_name"></C> 
</B> 
</A> 
В качестве первого значения может быть подана любая строка
XPath. Функции. normalize-space() 
//C[normalize-space(@id)="name"] 
<A> 
<B> 
<C id="name"></C> 
<C id=" name "></C> 
</B> 
</A> 
Строковая функция normalize-space() убирает лишние и пробелы
XPath. Функции. not() 
//*[not(@*)] 
<A> 
<B> 
<C id="name"></C> 
<C id="second_name"></C> 
</B> 
</A> 
Функция not() – логическое отрицание. 
Будут выбраны любые элементы, не имеющие атрибутов
XPath. Функции. count() 
//*[count(C)=2] 
<A> 
<B> 
<C></C> 
<C></C> 
</B> 
</A> 
Функция count() возвращает количество элементов. 
Будут выбраны элементы, имеющие два дочерних элемента "C"
XPath. Функции. last() 
//C[last()] 
<A> 
<B> 
<C></C> 
<C></C> 
<C></C> 
</B> 
</A> 
Функция last() возвращает номер последнего элемента в множестве
XPath. Функции. last() 
//C[last()-1] 
<A> 
<B> 
<C></C> 
<C></C> 
<C></C> 
</B> 
</A> 
Будет выбран предпоследний элемент
XPath. Операторы
XPath. Позиции элементов 
//C[position() mod 2=0] 
<A> 
<B> 
<C></C> 
<C></C> 
<C></C> 
<C></C> 
</B> 
</A> 
Функция position() возвращает позицию элемента. 
Оператор mod возвращает остаток от деления. 
Будут выбраны все элементы, имеющие четную позицию
1. Вводная часть 
2. Язык XPath 
3. Построение локаторов в Selenium 
• принципы составления 
• приемы 
• примеры 
3 
65%
XPath-локаторы. Принципы 
составления 
• Использовать, когда не хватает 
возможности простых локаторов 
• Читабельный 
• Универсальный – не содержит элементов, 
которые не влияют на нахождение 
элемента 
• Хранить локаторы в одном месте
Как писать локаторы? 
Используйте приемы
Приём 1. Ищите по тексту 
если Ваше приложение одноязычное 
Текст легко читать и менять. 
Id могут быть динамическими. 
<td> 
<button id="ext-39"/>Выполнить</button> 
</td> 
//button[text()="Выполнить"]
Приём 1. Ищите по тексту 
//td[contains(., "найди")] 
Функция text() возвращает первый текстовый элемент. 
<td> 
<span></span> 
" 
найди меня 
" 
</td> 
//td[contains(text(), "найди")]
Приём 2. Используйте только 
нужные элементы 
Не используйте элементы, которые не определяют элемент. 
В промежуточный путь могут быть добавлены новые элементы. 
<td> 
<div class="buttons"> 
<button id="perform"/>Выполнить</button> 
</div> 
<td> 
//button[@id="perform"] 
//div/button[@id="perform"]
Приём 3. Пользуйтесь contains() 
//button[contains(text(), "Выполнить")] 
<button id="ext-39"/> 
Выполнить действие 
</button> 
Ищите элемент по его части. 
<td> 
</td> 
Это поможет избежать лишних пробелов и переносов строк.
Приём 3. Пользуйтесь contains() 
<td> 
//button[contains(@name, "EditDocument")] 
<button name="SubSection$EditDocument$ChildBBB"/> 
</button> 
</td> 
Не используйте длинных и непонятных выражений. 
Их будут читать люди.
Приём 4. Комбинируйте пути 
//button[text()="Выбрать"]|//button[.//*[contains(text(), "Выбрать")]] 
Комбинируйте пути с помощью "|", если XPath элемента чуть-чуть отличается
Приём 5. Пишите относительные 
<td> 
<label for="name">Имя</label> 
</td> 
<td> 
<span nowrap> 
<input type="text"> 
</span> 
</td> 
пути 
//label[@for="name"]/../following-sibling::td[1]//input 
Пишите путь до нужного элемента относительно других элементов
Приём 6. Обратный вариант 
написания 
//input[./ancestor::td/preceding-sibling::td/label[@for="name"]] 
<td> 
<label for="name">Имя</label> 
</td> 
<td> 
<span nowrap> 
<input type="text"> 
</span> 
</td> 
Будет найден input, у которого предок td с предыдущим братом td, содержащим label с 
атрибутом for, имеющим значение name
Приём 7. XPath для таблиц 
//button[contains(@title, 'Редактировать запись')] 
[./parent::td[ 
(./preceding-sibling::td[@headers='a3']//*[contains(text(), 'Ответчик')]) 
and 
(./preceding-sibling::td[@headers='a2' and contains(text(), 'Петров Иван')]) 
and 
(./preceding-sibling::td[@headers='a1' and contains(text(), 'Физическое лицо')]) 
]]
Приём 7. XPath для таблиц 
Используйте переменные, чтобы найти нужную строку по заданным параметрам.
Примеры XPath-локаторов 
//input[contains(@id, 'ResponseDateField')] 
//button[.//*[contains(text(), 'Выбрать')]] 
//td[@id='EXPAND-PLUSMINUS'][following-sibling::*//*[contains(text(), 'Документ')]] 
//label[contains(text(), 'Вид')]/parent::td/following-sibling::td 
(//div[contains(text(),"Добавить")])[last()] 
//table[@id='ViewTable']//tr[@rowindex] 
//div[@node_name="pyActionArea" and @node_type="MAIN_RULE"]
Итог 
+ С помощью XPath-локатора можно найти 
путь до любого элемента
Ссылки 
http://ru.wikipedia.org/wiki/XPath 
http://www.w3schools.com/XPath/default.asp 
www.zvon.org/xxl/XPathTutorial/General_rus/examples.html 
http://habrahabr.ru/post/114772/
Спасибо за внимание!

Más contenido relacionado

Similar a XPath локаторы в Selenium WebDriver

Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьВадим Воробьев
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
Основы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSSОсновы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSSDenis Latushkin
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGAndrey Rebrov
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikovyaevents
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Yandex
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSГлеб Тарасов
 
Present forms&css
Present forms&cssPresent forms&css
Present forms&cssitc73
 

Similar a XPath локаторы в Selenium WebDriver (20)

Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительность
 
бегун
бегунбегун
бегун
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Основы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSSОсновы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSS
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
Ci
CiCi
Ci
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
Введение в Django
Введение в DjangoВведение в Django
Введение в Django
 
бегун
бегунбегун
бегун
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Javascript
JavascriptJavascript
Javascript
 
Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
 
Present forms&css
Present forms&cssPresent forms&css
Present forms&css
 

XPath локаторы в Selenium WebDriver

  • 1.
  • 2. Докладчик Кожухов Илья, Специалист по качеству k.i.a88@mail.ru Skype: ra_007
  • 3. 1 0% 1. Вводная часть • термины, определения • XPath в браузере 2. Язык XPath 3. Построение локаторов в Selenium
  • 4. Терминология • XPath – язык запросов к элементам XML-документа • Selenium WebDriver – инструмент для автоматизированного управления браузерами • Локатор – строка, уникально идентифицирующая элемент веб-страницы
  • 5. Локаторы в Selenium Инженер по тестированию задает в Selenium последовательность действий • Открыть страницу • Произвести действие • Проверить результат
  • 6. Локаторы в Selenium С помощью локаторов Selenium «понимает» с каким веб-элементом производить действие id Локатор name CSS XPath className tagName linkText partialLinkText
  • 7. XPath • XML – расширяемый язык разметки • XPath – путь к элементу xml • HTML – язык разметки Web-документа • DOM – объектная модель документа, в частности HTML • XPath – осуществляет навигацию по DOM
  • 8. Артефакты DOM Элемент <div id="create" > Создать </div> Атрибут Текст
  • 9. XPath в FireFox FireBug https://addons.mozilla.org/ru/firefox/addon/firebug FirePath https://addons.mozilla.org/ru/firefox/addon/firepath
  • 10. в
  • 11. XPath в Chrome Инструменты разработчика Elements Ctrl + F Вызвать Инструменты разработчика: • F12 • Ctrl+Shift+I • Настройки – Инструменты – Инструменты разработчика
  • 12.
  • 13. XPath в консоли браузера • $x(path) – принимает ХPath в качеств параметра и возвращает массив элементов • $0 … $4 – доступ к последним вызванным DOM - элементам
  • 14. 15% 1. Вводная часть 2. Язык XPath 2 • абсолютный путь • относительный путь • условия • оси • функции • операторы 3. Построение локаторов в Selenium
  • 15. XPath. Абсолютный путь A/B/C <A> <B> <C/> </B> </A> Путь от корневого элемента XPath XML
  • 16. Если использовать только абсолютный путь
  • 17.
  • 18. XPath. Относительный путь <A> //C <B> <C/> </B> </A> Относительный путь не учитывает промежуточные элементы
  • 19. XPath. Относительный путь <A> <B> <C> </C> <C> </C> </B> </A> //C Может быть несколько элементов
  • 20. <A> <B> XPath. Условия <C> </C> <C> </C> </B> </A> //C[1] В скобках [] заключены условия выборки
  • 21. XPath. @ - атрибут //C[@id] <A> <B> <C id> </C> <C> </C> </B> </A> Будут выбраны все элементы, имеющие атрибут "id"
  • 22. XPath. @ - атрибут //C[@id="one"] <A> <B> <C id="one"> </C> <C id="two"> </C> </B> </A> Значение атрибута можно сравнивать
  • 23. XPath. * - любой <A> <B id> <C id> </C> <C> </C> </B> </A> //*[@id] Любой элемент
  • 24. XPath. * - любой <A> <B> <C id> </C> <C name> </C> <C></C> </B> </A> //C[@*] Любой атрибут
  • 25. Как быть в этом случае? ??? <div id="name">Имя: </div> <input type="text"> <div id="second_name">Фамилия: </div> <input type="text"> Каким XPath найти input для ввода имени?
  • 26.
  • 27. XPath. Оси //div[@id="name"]/following-sibling::input[1] <div id="name">Имя: </div> <input type="text"> <div id="second_name">Фамилия: </div> <input type="text"> С помощью осей осуществляется навигация по узлам XML документа
  • 28.
  • 29. XPath. Оси. Сокращения • attribute:: — можно заменить на «@» • child:: — часто просто опускают • descendant:: — можно заменить на «.//» • parent:: — можно заменить на «..» • self:: — можно заменить на «.»
  • 30. XPath. Функции Функции позволяют использовать результат операций с множеством нод, строками, числами и логическими операторами в XPath выражених
  • 31. XPath. Функции. text() //C[text()="Доброе утро!"] <A> <B> <C>Доброе утро!</C> <C>Злое утро!</C> </B> </A> Функция text() возвращает набор текстовых нод
  • 32. XPath. Функции. contains() //C[contains(text(), "утро")] <A> <B> <C>Доброе утро!</C> <C>Злое утро!</C> </B> </A> Строковая функция contains() возвращает истину, если первая строка содержит вторую
  • 33. XPath. Функции. contains() //C[contains(@id, "name")] <A> <B> <C id="name"></C> <C id="second_name"></C> </B> </A> В качестве первого значения может быть подана любая строка
  • 34. XPath. Функции. normalize-space() //C[normalize-space(@id)="name"] <A> <B> <C id="name"></C> <C id=" name "></C> </B> </A> Строковая функция normalize-space() убирает лишние и пробелы
  • 35. XPath. Функции. not() //*[not(@*)] <A> <B> <C id="name"></C> <C id="second_name"></C> </B> </A> Функция not() – логическое отрицание. Будут выбраны любые элементы, не имеющие атрибутов
  • 36. XPath. Функции. count() //*[count(C)=2] <A> <B> <C></C> <C></C> </B> </A> Функция count() возвращает количество элементов. Будут выбраны элементы, имеющие два дочерних элемента "C"
  • 37. XPath. Функции. last() //C[last()] <A> <B> <C></C> <C></C> <C></C> </B> </A> Функция last() возвращает номер последнего элемента в множестве
  • 38. XPath. Функции. last() //C[last()-1] <A> <B> <C></C> <C></C> <C></C> </B> </A> Будет выбран предпоследний элемент
  • 40. XPath. Позиции элементов //C[position() mod 2=0] <A> <B> <C></C> <C></C> <C></C> <C></C> </B> </A> Функция position() возвращает позицию элемента. Оператор mod возвращает остаток от деления. Будут выбраны все элементы, имеющие четную позицию
  • 41. 1. Вводная часть 2. Язык XPath 3. Построение локаторов в Selenium • принципы составления • приемы • примеры 3 65%
  • 42. XPath-локаторы. Принципы составления • Использовать, когда не хватает возможности простых локаторов • Читабельный • Универсальный – не содержит элементов, которые не влияют на нахождение элемента • Хранить локаторы в одном месте
  • 43. Как писать локаторы? Используйте приемы
  • 44. Приём 1. Ищите по тексту если Ваше приложение одноязычное Текст легко читать и менять. Id могут быть динамическими. <td> <button id="ext-39"/>Выполнить</button> </td> //button[text()="Выполнить"]
  • 45. Приём 1. Ищите по тексту //td[contains(., "найди")] Функция text() возвращает первый текстовый элемент. <td> <span></span> " найди меня " </td> //td[contains(text(), "найди")]
  • 46. Приём 2. Используйте только нужные элементы Не используйте элементы, которые не определяют элемент. В промежуточный путь могут быть добавлены новые элементы. <td> <div class="buttons"> <button id="perform"/>Выполнить</button> </div> <td> //button[@id="perform"] //div/button[@id="perform"]
  • 47. Приём 3. Пользуйтесь contains() //button[contains(text(), "Выполнить")] <button id="ext-39"/> Выполнить действие </button> Ищите элемент по его части. <td> </td> Это поможет избежать лишних пробелов и переносов строк.
  • 48. Приём 3. Пользуйтесь contains() <td> //button[contains(@name, "EditDocument")] <button name="SubSection$EditDocument$ChildBBB"/> </button> </td> Не используйте длинных и непонятных выражений. Их будут читать люди.
  • 49. Приём 4. Комбинируйте пути //button[text()="Выбрать"]|//button[.//*[contains(text(), "Выбрать")]] Комбинируйте пути с помощью "|", если XPath элемента чуть-чуть отличается
  • 50. Приём 5. Пишите относительные <td> <label for="name">Имя</label> </td> <td> <span nowrap> <input type="text"> </span> </td> пути //label[@for="name"]/../following-sibling::td[1]//input Пишите путь до нужного элемента относительно других элементов
  • 51. Приём 6. Обратный вариант написания //input[./ancestor::td/preceding-sibling::td/label[@for="name"]] <td> <label for="name">Имя</label> </td> <td> <span nowrap> <input type="text"> </span> </td> Будет найден input, у которого предок td с предыдущим братом td, содержащим label с атрибутом for, имеющим значение name
  • 52. Приём 7. XPath для таблиц //button[contains(@title, 'Редактировать запись')] [./parent::td[ (./preceding-sibling::td[@headers='a3']//*[contains(text(), 'Ответчик')]) and (./preceding-sibling::td[@headers='a2' and contains(text(), 'Петров Иван')]) and (./preceding-sibling::td[@headers='a1' and contains(text(), 'Физическое лицо')]) ]]
  • 53. Приём 7. XPath для таблиц Используйте переменные, чтобы найти нужную строку по заданным параметрам.
  • 54. Примеры XPath-локаторов //input[contains(@id, 'ResponseDateField')] //button[.//*[contains(text(), 'Выбрать')]] //td[@id='EXPAND-PLUSMINUS'][following-sibling::*//*[contains(text(), 'Документ')]] //label[contains(text(), 'Вид')]/parent::td/following-sibling::td (//div[contains(text(),"Добавить")])[last()] //table[@id='ViewTable']//tr[@rowindex] //div[@node_name="pyActionArea" and @node_type="MAIN_RULE"]
  • 55. Итог + С помощью XPath-локатора можно найти путь до любого элемента
  • 56. Ссылки http://ru.wikipedia.org/wiki/XPath http://www.w3schools.com/XPath/default.asp www.zvon.org/xxl/XPathTutorial/General_rus/examples.html http://habrahabr.ru/post/114772/