Использование локаторов (locators) в Selenium. Часть 1

Что такое локаторы элементов и для чего они нужны? 

Локатор элемента -  это механизм определения местонахождения элемента относительно HTML документа, над которым необходимо выполнять какие-то действия. В Selenium основной еденицей является шаг, в котором нужно указать:

  • Команда (Command)
  • Цель (Target)
  • Значение (Value)
Например, открытие сайта http://google.com.ua. 
 <tr>
        <td>open</td>
        <td>http://google.com.ua/</td>
        <td></td>
    </tr>
Для большинства команд требуется наличие локатора элемента, который указывается в target.

Какие локаторы используются в Selenium?

  • identifier
  • id
  • name, и уточняющие фильтры
  • link
  • dom    
  • xpath  
  • link  
  • css
  • ui 
В данной статье будут описанны: identifier, id, name, link, фильтры. Остальные локаторы будут описаны во второй части.

Общая форма локатора

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&amp;pref=ig&amp;pval=3&amp;q=http://www.google.com.ua/ig%3Fhl%3Duk%26source%3Diglk&amp;usg=AFQjCNFP4lumd9xRSofuiLLkCCiUnMXZ2g">iGoogle</a>

Код для тестирования:

       <tr>
        <td>highlight</td>
        <td>link=iGoogle</td>
        <td></td>
    </tr>
3 лайка