Что такое локаторы элементов и для чего они нужны?
Локатор элемента - это механизм определения местонахождения элемента относительно HTML документа, над которым необходимо выполнять какие-то действия. В Selenium основной еденицей является шаг, в котором нужно указать:
- Команда (Command)
- Цель (Target)
- Значение (Value)
<tr>
<td>open</td>
<td>http://google.com.ua/</td>
<td></td>
</tr>
Какие локаторы используются в Selenium?
- identifier
- id
- name, и уточняющие фильтры
- link
- dom
- xpath
- link
- css
- ui
Общая форма локатора
locatorType=argument, где locatorType – это тип локатора, argument – это выражение
Как использовать локаторы?
Заметка: Все примеры будут проиллюстрированны на странице http://google.com.ua с использованием Selenium Core. Если вы не знакомы с Selenium Core, то вам будет полезно узнать, как писать простые тесты с нуля. Что нам нужно, это HTML страницы, которая будет тестироваться настроенный инструментарий с которым уже можно попрактиковаться.
Теперь в кратце пройдемся по всем выше указанным типам локаторов. Во всех примерах будет использоваться следующий пример, к которому будут, добавляется нужные шаги:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Empty Test</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<tr>
<td>open</td>
<td>http://google.com.ua/</td>
<td></td>
</tr>
</table>
</body>
</html>
identifier
Выбирает элемент, атрибут @id которого соответствует, какому-то идентификатору. Если элемента с таким атрибутом нет, то будет выбран первый элемент, у которого значение атрибута @name будет соответствовать искомому. Думаю, тут все просто. Алгоритм таков, ищем нужный элемент и смотрим, что бы у него был атрибут @id. Например, что ищем:
<div id="gbar">
Код для тестирования:
<tr>
<td>highlight</td>
<td>identifier=gbar</td>
<td></td>
</tr>
id
Все тоже самое, что и для локатора identifier, только в данном случае выбирается строго по атрибуту @id без всяких условий. Например, что ищем:
<div id="guser" width="100%">
Код для тестирования:
<tr>
<td>highlight</td>
<td>id=guser</td>
<td></td>
</tr>
name
Выбирает элемент, атрибут @name которого соответствует, какому-то значению. Например, что ищем:
<form name="f" action="/search">
<form action="/search">
Код для тестирования:
<tr>
<td>highlight</td>
<td>name=f</td>
<td></td>
</tr>
Фильтры
Также, для локатора типа name можно использовать фильтры по значению элемента и по индексу, для того, что бы уточнить поиск. Например, по атрибуту @name выбирается несколько элементов, а нужно выбрать всего лишь один, то можно добраться до нужного элемента по индексу index=some_index (порядковый номер элемента, нумерация ведется сверху вниз по HTML документу) или по значению элемента value=some_value. Формат фильтра подобный формату локатора filterType=argument. Фильтр указуется сразу же после определелния name локатора. Также, есть возможность указания фильтра по умолчанию (по значению элемента), т.е. можно не указывать выражение value=, а сразу писать его значение. Например, что ищем:
<input id="all" type="radio" checked="" value="" name="meta"/>
<label for="all"> Інтернет </label>
<input id="lgr" type="radio" value="lr=lang_uk" name="meta"/>
<label for="lgr"> сторінки українською мовою </label>
<input id="cty" type="radio" value="cr=countryUA" name="meta"/>
<label for="cty"> сторінки з України </label>
Код для тестирования:
<!--Фильтр по индексу-->
<tr>
<td>highlight</td>
<td>name=meta index=2</td>
<td></td>
</tr>
<!--Фильтр по значению элемента-->
<tr>
<td>highlight</td>
<td>name=meta value=cr=countryUA</td>
<td></td>
</tr>
<!--Фильтр по умолчанию-->
<tr>
<td>highlight</td>
<td>name=aq f</td>
<td></td>
</tr>
link
Выбирает элемент, название ссылки, которой соответствуюет искомому тексту. Например, что ищем:
<a href="/url?sa=p&pref=ig&pval=3&q=http://www.google.com.ua/ig%3Fhl%3Duk%26source%3Diglk&usg=AFQjCNFP4lumd9xRSofuiLLkCCiUnMXZ2g">iGoogle</a>
Код для тестирования:
<tr>
<td>highlight</td>
<td>link=iGoogle</td>
<td></td>
</tr>