Protractor предоставляет несколько способов поиска и взаимодействия с элементами на веб-странице. При автоматизации тестирования в JavaScript основной задачей является точное определение одного элемента, чтобы избежать ошибок и повысить стабильность тестов.
Locator)Protractor использует локаторы, которые позволяют идентифицировать элементы по различным атрибутам. Основные методы поиска одного элемента:
element(by.css('selector'))
Позволяет выбрать элемент по CSS-селектору. Это наиболее гибкий и часто
используемый метод.
let button = element(by.css('.submit-button'));
Важно: метод возвращает объект ElementFinder, а не
массив элементов, даже если селектор совпадает с несколькими
объектами.
element(by.id('id')) Поиск по
уникальному идентификатору элемента. Самый быстрый способ при наличии
уникального id.
let usernameInput = element(by.id('username'));element(by.className('className'))
Поиск по классу. Может быть использован, если класс однозначно
идентифицирует элемент.
let alertBox = element(by.className('alert-danger'));element(by.tagName('tag'))
Используется для поиска элементов по имени тега. Обычно комбинируется с
другими локаторами через CSS.
let header = element(by.tagName('h1'));element(by.name('name')) Локатор
для поиска элементов по атрибуту name. Часто используется
для полей форм.
let emailInput = element(by.name('email'));element(by.xpath('XPath'))
Позволяет находить элементы с помощью XPath. Подходит для сложных или
динамических структур DOM.
let submitButton = element(by.xpath("//button[text()='Submit']"));element(by.buttonText('text'))
Поиск кнопок по видимому тексту. Очень удобен для кнопок с уникальными
подписями.
let loginButton = element(by.buttonText('Login'));element(by.partialButtonText('text'))
Поиск кнопок по частичному совпадению текста.
element(by.linkText('text')) и
element(by.partialLinkText('text'))
Используются для ссылок. Первый вариант — полное совпадение текста,
второй — частичное.
ElementFinderElementFinder — это объект, представляющий один
элемент на странице. Он поддерживает цепочки методов и
асинхронное взаимодействие:
click() — клик по элементуsendKeys(value) — ввод текстаgetText() — получение видимого
текстаgetAttribute(attr) — получение
значения атрибутаПример использования:
let searchInput = element(by.css('input.search-field'));
searchInput.sendKeys('Protractor');
let searchButton = element(by.css('button.search-button'));
searchButton.click();
Уникальность element() возвращает
первый найденный элемент, соответствующий локатору. Если селектор
совпадает с несколькими элементами, остальные игнорируются.
Асинхронность Все методы взаимодействия с
ElementFinder возвращают Promise, что
требует использования await в современном JavaScript.
let text = await element(by.css('.message')).getText();Цепочка локаторов Можно создавать цепочку локаторов для точного выбора элемента внутри контейнера:
let container = element(by.css('.container'));
let button = container.element(by.css('button.submit'));Ожидания (ExpectedConditions) Для
стабильности тестов рекомендуется использовать ожидания перед
взаимодействием с элементом:
let EC = protractor.ExpectedConditions;
let submitButton = element(by.id('submit'));
browser.wait(EC.elementToBeClickable(submitButton), 5000);
await submitButton.click();await или цепочки .then() для
корректной работы с асинхронностью.Поиск одного элемента — базовая, но критически важная часть
тестирования с Protractor. Правильный выбор локатора и грамотное
использование ElementFinder обеспечивают стабильность и
читаемость тестов.