SlideShare a Scribd company logo
Докладчик 
Кожухов Илья, 
Специалист по качеству 
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

JavaScript - Chapter 8 - Objects
 JavaScript - Chapter 8 - Objects JavaScript - Chapter 8 - Objects
JavaScript - Chapter 8 - Objects
WebStackAcademy
 
JavaScript guide 2020 Learn JavaScript
JavaScript guide 2020 Learn JavaScriptJavaScript guide 2020 Learn JavaScript
JavaScript guide 2020 Learn JavaScript
Laurence Svekis ✔
 
Java script arrays
Java script arraysJava script arrays
Java script arrays
Frayosh Wadia
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
Naphachara Rattanawilai
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
Gil Fink
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring Security
Dzmitry Naskou
 
Angular 4 The new Http Client Module
Angular 4 The new Http Client ModuleAngular 4 The new Http Client Module
Angular 4 The new Http Client Module
arjun singh
 
Javascript
JavascriptJavascript
Javascript
Nagarajan
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
shreesenthil
 
JavaScript - Chapter 4 - Types and Statements
 JavaScript - Chapter 4 - Types and Statements JavaScript - Chapter 4 - Types and Statements
JavaScript - Chapter 4 - Types and Statements
WebStackAcademy
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first steps
Renato Primavera
 
Demystifying Angular Animations
Demystifying Angular AnimationsDemystifying Angular Animations
Demystifying Angular Animations
Gil Fink
 
react-slides.pptx
react-slides.pptxreact-slides.pptx
react-slides.pptx
DayNightGaMiNg
 
Javascript
JavascriptJavascript
Javascript
mussawir20
 
Javascript arrays
Javascript arraysJavascript arrays
Javascript arrays
Hassan Dar
 
React Context API
React Context APIReact Context API
React Context API
NodeXperts
 
JavaScript: Variables and Functions
JavaScript: Variables and FunctionsJavaScript: Variables and Functions
JavaScript: Variables and FunctionsJussi Pohjolainen
 
React
React React
React
중운 박
 

What's hot (20)

Spring annotation
Spring annotationSpring annotation
Spring annotation
 
JavaScript - Chapter 8 - Objects
 JavaScript - Chapter 8 - Objects JavaScript - Chapter 8 - Objects
JavaScript - Chapter 8 - Objects
 
JavaScript guide 2020 Learn JavaScript
JavaScript guide 2020 Learn JavaScriptJavaScript guide 2020 Learn JavaScript
JavaScript guide 2020 Learn JavaScript
 
Java script arrays
Java script arraysJava script arrays
Java script arrays
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
jQuery Fundamentals
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring Security
 
Angular 4 The new Http Client Module
Angular 4 The new Http Client ModuleAngular 4 The new Http Client Module
Angular 4 The new Http Client Module
 
Javascript
JavascriptJavascript
Javascript
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
 
JavaScript - Chapter 4 - Types and Statements
 JavaScript - Chapter 4 - Types and Statements JavaScript - Chapter 4 - Types and Statements
JavaScript - Chapter 4 - Types and Statements
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first steps
 
Demystifying Angular Animations
Demystifying Angular AnimationsDemystifying Angular Animations
Demystifying Angular Animations
 
react-slides.pptx
react-slides.pptxreact-slides.pptx
react-slides.pptx
 
Javascript
JavascriptJavascript
Javascript
 
Javascript arrays
Javascript arraysJavascript arrays
Javascript arrays
 
React Context API
React Context APIReact Context API
React Context API
 
Java script
Java scriptJava script
Java script
 
JavaScript: Variables and Functions
JavaScript: Variables and FunctionsJavaScript: Variables and Functions
JavaScript: Variables and Functions
 
React
React React
React
 

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

Adymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher SqlAdymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher SqlOleksandr Petrov
 
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 SqlAlexander Dymo
 
Agile Instrumentation
Agile InstrumentationAgile Instrumentation
Agile Instrumentation
Mikalai_Kardash
 
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
QAFest
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
metaform
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Вадим Воробьев
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
Основы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSSОсновы работы с таблицами стилей CSS
Основы работы с таблицами стилей CSS
Denis Latushkin
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
Dima Dzuba
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
Alexander Byndyu
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
Timophy Chaptykov
 
Введение в Django
Введение в DjangoВведение в Django
Введение в Django
Илья Барышев
 
вебинар - функциональное тестирование с использованием 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
 
Javascript
JavascriptJavascript
Javascript
Vasya Petrov
 

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

Adymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher SqlAdymo Barcamp Presentation Faster Higher Sql
Adymo Barcamp Presentation Faster Higher Sql
 
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
 
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/