SlideShare a Scribd company logo
1 of 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/
Спасибо за внимание!

More Related Content

What's hot

Web design -_lecture_1
Web design -_lecture_1Web design -_lecture_1
Web design -_lecture_1
Soyokos Soyoko
 
JavaScript: Variables and Functions
JavaScript: Variables and FunctionsJavaScript: Variables and Functions
JavaScript: Variables and Functions
Jussi Pohjolainen
 
Java script final presentation
Java script final presentationJava script final presentation
Java script final presentation
Adhoura Academy
 

What's hot (20)

Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
Javascript conditional statements
Javascript conditional statementsJavascript conditional statements
Javascript conditional statements
 
Introduction to SQL Antipatterns
Introduction to SQL AntipatternsIntroduction to SQL Antipatterns
Introduction to SQL Antipatterns
 
Basics of html for web development by software outsourcing company india
Basics of html for web development   by software outsourcing company indiaBasics of html for web development   by software outsourcing company india
Basics of html for web development by software outsourcing company india
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
Getting Started with XCTest and XCUITest for iOS App Testing
Getting Started with XCTest and XCUITest for iOS App TestingGetting Started with XCTest and XCUITest for iOS App Testing
Getting Started with XCTest and XCUITest for iOS App Testing
 
Google Chrome DevTools features overview
Google Chrome DevTools features overviewGoogle Chrome DevTools features overview
Google Chrome DevTools features overview
 
Web design -_lecture_1
Web design -_lecture_1Web design -_lecture_1
Web design -_lecture_1
 
Pros & cons of svelte
Pros & cons of sveltePros & cons of svelte
Pros & cons of svelte
 
JavaScript: Variables and Functions
JavaScript: Variables and FunctionsJavaScript: Variables and Functions
JavaScript: Variables and Functions
 
JavaScript guide 2020 Learn JavaScript
JavaScript guide 2020 Learn JavaScriptJavaScript guide 2020 Learn JavaScript
JavaScript guide 2020 Learn JavaScript
 
RESTFul development with Apache sling
RESTFul development with Apache slingRESTFul development with Apache sling
RESTFul development with Apache sling
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & Arrays
 
Bdd and spec flow
Bdd and spec flowBdd and spec flow
Bdd and spec flow
 
Flutter 3
Flutter 3Flutter 3
Flutter 3
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
Body Section in HTML - R.D.Sivakumar
Body Section in HTML - R.D.SivakumarBody Section in HTML - R.D.Sivakumar
Body Section in HTML - R.D.Sivakumar
 
Gherkin /BDD intro
Gherkin /BDD introGherkin /BDD intro
Gherkin /BDD intro
 
Java script final presentation
Java script final presentationJava script final presentation
Java script final presentation
 
ASP.NET Routing & MVC
ASP.NET Routing & MVCASP.NET Routing & MVC
ASP.NET Routing & MVC
 

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

Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher SqlAlexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo
 
Adymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher SqlAdymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher Sql
Oleksandr Petrov
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
guestfc8ae0
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
Andrey Rebrov
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
Zestranec
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
 

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

Alexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher SqlAlexander Dymo - Barcamp 2009 - Faster Higher Sql
Alexander Dymo - Barcamp 2009 - Faster Higher Sql
 
Adymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher SqlAdymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher Sql
 
Agile Instrumentation
Agile InstrumentationAgile Instrumentation
Agile Instrumentation
 
QA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
QA Fest 2015. Иван Пашко. XPath yourself. Tips & TricksQA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
QA Fest 2015. Иван Пашко. XPath yourself. Tips & Tricks
 
Работа с БД в 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
 

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/