Тестирование: Работа с локаторами

Selenium парсит web страницы на древовидную структуру Xpath.

Документация по Xpath доступна здесь:
[https://www.w3schools.com/xml/xpath_intro.asp]

Selenium умеет взаимодействовать с элементами на web странице при помощи различных локаторов

Локаторы - это различные идентификаторы элементов: кнопок, таблиц, вкладок, чек-боксов, комбо-боксов и т.д.
С помощью них Selenium понимает с каким элементом, где, и как ему взаимодействовать.

У некоторых элементов может быть одновременно несколько локаторов, даже если это не так, то всегда есть как минимум один.

Виды локаторов

ID

Пример использования:
Image20190614122816_1.png 
В данном случае видно, что локатор "add-patient" относится к кнопке "Добавить", а текст "1 match" в поисковой строке по Xpath говорит о том, что найден всего один элемент по данному ID, то есть локатор является уникальным и Selenium не запутается при поиске элемента.

 

Name

Пример использования:
Image20190614122816_2.png 
В данном случае видно, что локатор "name=garantletter" относится к чек-боксу, часто значение тега name cоответствует значению id, как на скриншоте, но иногда id локатор отсутствует, и в автотестах используем локатор Name. Часто локатор Name является единственным вариантом взаимодействия с чек-боксами и текст-боксами.

 

className

Пример использования:
Image20190614122816_3.png 
Редко используемый локатор, чаще всего применяемый к неактивным для взаимодействия объектам (например ищем объекты, которые ожидаются для отображения или, наоборот, пропадания). Типично это шапки сраницы, заголовки таблиц и тд.

 

cssSelector

Пример использования:
Image20190614122816_4.png 
В проекте автотестов почти не используется, т.к. получается малочитабельный код, используется для поиска на странице особо сложных комбобоксов, у которых отсутствуют какие-либо другие локаторы.

 

linkText

Пример использования:
Image20190614122816_5.png 
Не совсем надежный локатор, Selenium ищет по нему элемент, по отображаемому на странице тексту. В нашем проекте автотестирования используется для открытия различных разделов системы (все ссылки на главной странице нажимаются через linkText). Проще говоря с помощью этого локатора мы нажимаем на текст, под которым прячется гиперссылка.

 

XPATH

Пример использования:
Image20190614122816_6.png 
В ситуации когда никаких других локаторов нет, XPATH есть всегда, этот локатор представляет собой путь до элемента по дереву страницы. Из минусов: малочитабельный код, если вставлять пути по дереву, иногда Selenium ищет элемент достаточно долго. Из плюсов: работает всегда, очень гибкий(если правильно писать запросы к дереву). Xpath является довольно мощным инструментом, при умелом обращении. Есть что-то похожее на запросы, ссылка на документацию XPATH указана вначале страницы.

Примеры применения xpath:
Поиск элемента по содержимому:

Для поиска точного совпадения текста

//td[text()="Текст"]
$blankCode="Текст" 
$this->webDriver->findElement(WebDriverBy::xpath("//*[text()=\"$blankCode\"]"))->getText();

Для всех элементов:

//*[contains(.,"Оплата заказа")]
$this->clickElementWithXpath("//*[contains(.,\"Оплата заказа\")]");

Для элементов определенного типа:

//a[contains(.,"Оплата заказа")]
$this->waitElementToDisappearByXpath("//a[contains(.,\"Оплата заказа\")]")

Поиск элемента по нескольким признакам

$this->clickElementWithXpath("//*[@type=\"radio\" and @value=\"2\"]");

Поиск соседнего элемента
/.. - чтобы подняться вверх по дереву

$this->waitElementToAppearByXpath(15,"//td[contains(.,\"Глюкоза (фторид)\")]/../td[@class=\"price\"]/span");

Для выбора 2го элемента в доме:

$this->clickElementWithXpath("//div[@class='modal-container--actions']/button[2]");

Использование переменной внутри xpath:

$this->webDriver->findElement(WebDriverBy::xpath("//*[text()='" . $dateNextDay . "']"))->click();

Ожидаем определенное состояния "display: none" для атрибута style в объекте loading

$this->waitElementToDisappearByXpath(15,'//*[@id="loading" and contains(normalize-space(@style), \'display: none\')]');

24.11.2010 09:02