xpath локаторы в selenium webdriver

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

Upload: -

Post on 14-Nov-2014

635 views

Category:

Internet


9 download

DESCRIPTION

XPath locators in Selenium WebDriver

TRANSCRIPT

Page 1: XPath локаторы в Selenium WebDriver

XPath локаторы в Selenium

WebDriver

Page 2: XPath локаторы в Selenium WebDriver

Докладчик

Кожухов Илья, Специалист по качеству

[email protected]

Skype: ra_007

Page 3: XPath локаторы в Selenium WebDriver

1. Вводная часть• термины, определения• XPath в браузере

2. Язык XPath3. Построение локаторов в Selenium

1

0%

Page 4: XPath локаторы в Selenium WebDriver

• XPath – язык запросов к элементам XML-документа

• Selenium WebDriver –  инструмент для автоматизированного управления браузерами

• Локатор – строка, уникально идентифицирующая элемент веб-страницы

Терминология

Page 5: XPath локаторы в Selenium WebDriver

Инженер по тестированию задает в Selenium последовательность действий

• Открыть страницу• Произвести действие • Проверить результат

Локаторы в Selenium

Page 6: XPath локаторы в Selenium WebDriver

С помощью локаторов Selenium «понимает» с каким веб-элементом производить действие

Локаторid

name

CSS

XPath

className

tagName linkText

partialLinkText

Локаторы в Selenium

Page 7: XPath локаторы в Selenium WebDriver

• XML – расширяемый язык разметки• XPath – путь к элементу xml• HTML – язык разметки Web-документа• DOM – объектная модель документа, в

частности HTML • XPath – осуществляет навигацию по DOM

XPath

Page 8: XPath локаторы в Selenium WebDriver

<div id="create" > Создать </div>

Элемент

Атрибут Текст

Артефакты DOM

Page 10: XPath локаторы в Selenium WebDriver

в

Page 11: XPath локаторы в Selenium WebDriver

Инструменты разработчика

Elements

Ctrl + F

Вызвать Инструменты разработчика:• F12• Ctrl+Shift+I• Настройки – Инструменты –

Инструменты разработчика

XPath в Chrome

Page 12: XPath локаторы в Selenium WebDriver
Page 13: XPath локаторы в Selenium WebDriver

• $x(path) – принимает ХPath в качеств параметра и возвращает массив элементов

• $0 … $4 – доступ к последним вызванным DOM - элементам

XPath в консоли браузера

Page 14: XPath локаторы в Selenium WebDriver

1. Вводная часть2. Язык XPath• абсолютный путь• относительный путь• условия• оси• функции• операторы

3. Построение локаторов в Selenium

2

15%

Page 15: XPath локаторы в Selenium WebDriver

<A> <B> <C/> </B></A>

A/B/C

XPath. Абсолютный путь

Путь от корневого элемента

XPath

XML

Page 16: XPath локаторы в Selenium WebDriver

Если использовать только абсолютный путь

Page 17: XPath локаторы в Selenium WebDriver
Page 18: XPath локаторы в Selenium WebDriver

<A> <B> <C/> </B></A>

//C

Относительный путь не учитывает промежуточные элементы

XPath. Относительный путь

Page 19: XPath локаторы в Selenium WebDriver

<A> <B> <C> </C> <C> </C> </B></A>

//C

XPath. Относительный путь

Может быть несколько элементов

Page 20: XPath локаторы в Selenium WebDriver

<A> <B> <C> </C> <C> </C> </B></A>

//C[1]

В скобках [] заключены условия выборки

XPath. Условия

Page 21: XPath локаторы в Selenium WebDriver

<A> <B> <C id> </C> <C> </C> </B></A>

//C[@id]

XPath. @ - атрибут

Будут выбраны все элементы, имеющие атрибут "id"

Page 22: XPath локаторы в Selenium WebDriver

<A> <B> <C id="one"> </C> <C id="two"> </C> </B></A>

//C[@id="one"]

XPath. @ - атрибут

Значение атрибута можно сравнивать

Page 23: XPath локаторы в Selenium WebDriver

<A> <B id> <C id> </C> <C> </C> </B></A>

//*[@id]

XPath. * - любой

Любой элемент

Page 24: XPath локаторы в Selenium WebDriver

<A> <B> <C id> </C> <C name> </C> <C></C> </B></A>

//C[@*]

XPath. * - любой

Любой атрибут

Page 25: XPath локаторы в Selenium WebDriver

Как быть в этом случае?

<div id="name">Имя: </div><input type="text"><div id="second_name">Фамилия: </div><input type="text">

???

Каким XPath найти input для ввода имени?

Page 26: XPath локаторы в Selenium WebDriver
Page 27: XPath локаторы в Selenium WebDriver

//div[@id="name"]/following-sibling::input[1]

<div id="name">Имя: </div><input type="text"><div id="second_name">Фамилия: </div><input type="text">

XPath. Оси

С помощью осей осуществляется навигация по узлам XML документа

Page 28: XPath локаторы в Selenium WebDriver
Page 29: XPath локаторы в Selenium WebDriver

• attribute:: — можно заменить на «@»• child:: — часто просто опускают • descendant:: — можно заменить на «.//»• parent:: — можно заменить на «..»• self:: — можно заменить на «.»

XPath. Оси. Сокращения

Page 30: XPath локаторы в Selenium WebDriver

Функции позволяют использовать результат операций с множеством нод, строками, числами и логическими операторами в XPath выражених

XPath. Функции

Page 31: XPath локаторы в Selenium WebDriver

<A> <B> <C>Доброе утро!</C> <C>Злое утро!</C> </B></A>

//C[text()="Доброе утро!"]

XPath. Функции. text()

Функция text() возвращает набор текстовых нод

Page 32: XPath локаторы в Selenium WebDriver

//C[contains(text(), "утро")]<A> <B> <C>Доброе утро!</C> <C>Злое утро!</C> </B></A>

XPath. Функции. contains()

Строковая функция contains() возвращает истину, если первая строка содержит вторую

Page 33: XPath локаторы в Selenium WebDriver

//C[contains(@id, "name")]

<A> <B> <C id="name"></C> <C id="second_name"></C> </B></A>

XPath. Функции. contains()

В качестве первого значения может быть подана любая строка

Page 34: XPath локаторы в Selenium WebDriver

//C[normalize-space(@id)="name"]

<A> <B> <C id="name"></C> <C id=" name "></C> </B></A>

XPath. Функции. normalize-space()

Строковая функция normalize-space() убирает лишние и пробелы

Page 35: XPath локаторы в Selenium WebDriver

//*[not(@*)]

<A> <B> <C id="name"></C> <C id="second_name"></C> </B></A>

XPath. Функции. not()

Функция not() – логическое отрицание.Будут выбраны любые элементы, не имеющие атрибутов

Page 36: XPath локаторы в Selenium WebDriver

//*[count(C)=2]

<A> <B> <C></C> <C></C> </B></A>

Функция count() возвращает количество элементов.Будут выбраны элементы, имеющие два дочерних элемента "C"

XPath. Функции. count()

Page 37: XPath локаторы в Selenium WebDriver

//C[last()]

<A> <B> <C></C> <C></C> <C></C> </B></A>

Функция last() возвращает номер последнего элемента в множестве

XPath. Функции. last()

Page 38: XPath локаторы в Selenium WebDriver

//C[last()-1]

<A> <B> <C></C> <C></C> <C></C> </B></A>

XPath. Функции. last()

Будет выбран предпоследний элемент

Page 39: XPath локаторы в Selenium WebDriver

XPath. Операторы

Page 40: XPath локаторы в Selenium WebDriver

//C[position() mod 2=0]

<A> <B> <C></C> <C></C> <C></C> <C></C> </B></A>

XPath. Позиции элементов

Функция position() возвращает позицию элемента.Оператор mod возвращает остаток от деления.

Будут выбраны все элементы, имеющие четную позицию

Page 41: XPath локаторы в Selenium WebDriver

1. Вводная часть2. Язык XPath3. Построение локаторов в Selenium• принципы составления • приемы• примеры

3

65%

Page 42: XPath локаторы в Selenium WebDriver

• Использовать, когда не хватает возможности простых локаторов

• Читабельный• Универсальный – не содержит элементов,

которые не влияют на нахождение элемента

• Хранить локаторы в одном месте

XPath-локаторы. Принципы составления

Page 43: XPath локаторы в Selenium WebDriver

Как писать локаторы?

Используйте приемы

Page 44: XPath локаторы в Selenium WebDriver

Приём 1. Ищите по тексту

Текст легко читать и менять.Id могут быть динамическими.

<td><button id="ext-39"/>Выполнить</button>

</td>

//button[text()="Выполнить"]

если Ваше приложение одноязычное

Page 45: XPath локаторы в Selenium WebDriver

Приём 1. Ищите по тексту

Функция text() возвращает первый текстовый элемент.

<td><span></span>"найди меня"

</td>

//td[contains(., "найди")]

//td[contains(text(), "найди")]

Page 46: XPath локаторы в Selenium WebDriver

Приём 2. Используйте только нужные элементы

Не используйте элементы, которые не определяют элемент.В промежуточный путь могут быть добавлены новые элементы.

<td><div class="buttons">

<button id="perform"/>Выполнить</button></div>

<td>

//button[@id="perform"]

//div/button[@id="perform"]

Page 47: XPath локаторы в Selenium WebDriver

Приём 3. Пользуйтесь contains()

Ищите элемент по его части.Это поможет избежать лишних пробелов и переносов строк.

<td><button id="ext-39"/>

Выполнить действие </button>

</td>

//button[contains(text(), "Выполнить")]

Page 48: XPath локаторы в Selenium WebDriver

<td><button name="SubSection$EditDocument$ChildBBB"/> </button>

</td>

Приём 3. Пользуйтесь contains()

Не используйте длинных и непонятных выражений.Их будут читать люди.

//button[contains(@name, "EditDocument")]

Page 49: XPath локаторы в Selenium WebDriver

Приём 4. Комбинируйте пути

Комбинируйте пути с помощью "|", если XPath элемента чуть-чуть отличается

//button[text()="Выбрать"]|//button[.//*[contains(text(), "Выбрать")]]

Page 50: XPath локаторы в Selenium WebDriver

<td><label for="name">Имя</label>

</td><td>

<span nowrap><input type="text">

</span></td>

Приём 5. Пишите относительные пути

//label[@for="name"]/../following-sibling::td[1]//input

Пишите путь до нужного элемента относительно других элементов

Page 51: XPath локаторы в Selenium WebDriver

Приём 6. Обратный вариант написания

<td><label for="name">Имя</label>

</td><td>

<span nowrap><input type="text">

</span></td>

//input[./ancestor::td/preceding-sibling::td/label[@for="name"]]

Будет найден input, у которого предок td с предыдущим братом td, содержащим label с атрибутом for, имеющим значение name

Page 52: XPath локаторы в Selenium WebDriver

Приём 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(), 'Физическое лицо')])]]

Page 53: XPath локаторы в Selenium WebDriver

Приём 7. XPath для таблиц

Используйте переменные, чтобы найти нужную строку по заданным параметрам.

Page 54: XPath локаторы в Selenium WebDriver

Примеры 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()]

//div[@node_name="pyActionArea" and @node_type="MAIN_RULE"]

//table[@id='ViewTable']//tr[@rowindex]

Page 55: XPath локаторы в Selenium WebDriver

Итог

+ С помощью XPath-локатора можно найти путь до любого элемента

Page 56: XPath локаторы в Selenium WebDriver

Ссылки

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/

Page 57: XPath локаторы в Selenium WebDriver

Спасибо за внимание!