Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Докладчик 
Кожухов Илья, 
Специалист по качеству 
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...
XPath 
• XML – расширяемый язык разметки 
• XPath – путь к элементу xml 
• HTML – язык разметки Web-документа 
• DOM – объ...
Артефакты DOM 
Элемент 
<div id="create" > Создать </div> 
Атрибут Текст
XPath в FireFox 
FireBug 
https://addons.mozilla.org/ru/firefox/addon/firebug 
FirePath 
https://addons.mozilla.org/ru/fir...
в
XPath в Chrome 
Инструменты разработчика 
Elements 
Ctrl + F 
Вызвать Инструменты разработчика: 
• F12 
• Ctrl+Shift+I 
• ...
XPath в консоли браузера 
• $x(path) – принимает ХPath в качеств 
параметра и возвращает массив элементов 
• $0 … $4 – дос...
15% 
1. Вводная часть 
2. Язык XPath 
2 
• абсолютный путь 
• относительный путь 
• условия 
• оси 
• функции 
• операторы...
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> 
<inp...
XPath. Оси 
//div[@id="name"]/following-sibling::input[1] 
<div id="name">Имя: </div> 
<input type="text"> 
<div id="secon...
XPath. Оси. Сокращения 
• attribute:: — можно заменить на «@» 
• child:: — часто просто опускают 
• descendant:: — можно з...
XPath. Функции 
Функции позволяют использовать результат операций с множеством нод, строками, 
числами и логическими опера...
XPath. Функции. text() 
//C[text()="Доброе утро!"] 
<A> 
<B> 
<C>Доброе утро!</C> 
<C>Злое утро!</C> 
</B> 
</A> 
Функция ...
XPath. Функции. contains() 
//C[contains(text(), "утро")] 
<A> 
<B> 
<C>Доброе утро!</C> 
<C>Злое утро!</C> 
</B> 
</A> 
С...
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...
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() возвращает количество эл...
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> 
Функция posit...
1. Вводная часть 
2. Язык XPath 
3. Построение локаторов в Selenium 
• принципы составления 
• приемы 
• примеры 
3 
65%
XPath-локаторы. Принципы 
составления 
• Использовать, когда не хватает 
возможности простых локаторов 
• Читабельный 
• У...
Как писать локаторы? 
Используйте приемы
Приём 1. Ищите по тексту 
если Ваше приложение одноязычное 
Текст легко читать и менять. 
Id могут быть динамическими. 
<t...
Приём 1. Ищите по тексту 
//td[contains(., "найди")] 
Функция text() возвращает первый текстовый элемент. 
<td> 
<span></s...
Приём 2. Используйте только 
нужные элементы 
Не используйте элементы, которые не определяют элемент. 
В промежуточный пут...
Приём 3. Пользуйтесь contains() 
//button[contains(text(), "Выполнить")] 
<button id="ext-39"/> 
Выполнить действие 
</but...
Приём 3. Пользуйтесь contains() 
<td> 
//button[contains(@name, "EditDocument")] 
<button name="SubSection$EditDocument$Ch...
Приём 4. Комбинируйте пути 
//button[text()="Выбрать"]|//button[.//*[contains(text(), "Выбрать")]] 
Комбинируйте пути с по...
Приём 5. Пишите относительные 
<td> 
<label for="name">Имя</label> 
</td> 
<td> 
<span nowrap> 
<input type="text"> 
</spa...
Приём 6. Обратный вариант 
написания 
//input[./ancestor::td/preceding-sibling::td/label[@for="name"]] 
<td> 
<label for="...
Приём 7. XPath для таблиц 
//button[contains(@title, 'Редактировать запись')] 
[./parent::td[ 
(./preceding-sibling::td[@h...
Приём 7. XPath для таблиц 
Используйте переменные, чтобы найти нужную строку по заданным параметрам.
Примеры XPath-локаторов 
//input[contains(@id, 'ResponseDateField')] 
//button[.//*[contains(text(), 'Выбрать')]] 
//td[@i...
Итог 
+ С помощью XPath-локатора можно найти 
путь до любого элемента
Ссылки 
http://ru.wikipedia.org/wiki/XPath 
http://www.w3schools.com/XPath/default.asp 
www.zvon.org/xxl/XPathTutorial/Gen...
Спасибо за внимание!
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
Upcoming SlideShare
Loading in …5
×

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

36,568 views

Published on

XPath locators in Selenium WebDriver

Published in: Internet

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

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

×