by.name() — это один из локаторов Protractor, который
используется для поиска элементов на веб-странице по атрибуту
name. Он является частью встроенного объекта
by, предоставляемого Protractor, и позволяет
взаимодействовать с элементами формы, кнопками и другими элементами,
имеющими уникальный или известный name.
element(by.name('имя_элемента'))
'имя_элемента' — значение атрибута name в
HTML-элементе, который требуется найти.element() — функция Protractor для получения одного
веб-элемента.by.name() возвращает объект типа
ElementFinder, с которым можно выполнять действия,
например, клик, ввод текста или проверку состояния элемента.HTML-структура:
<input type="text" name="username" />
<input type="password" name="password" />
<button name="loginBtn">Войти</button>
Пример теста:
it('ввод данных и клик по кнопке входа', async () => {
const usernameInput = element(by.name('username'));
const passwordInput = element(by.name('password'));
const loginButton = element(by.name('loginBtn'));
await usernameInput.sendKeys('testuser');
await passwordInput.sendKeys('password123');
await loginButton.click();
});
В этом примере:
element(by.name('username')) находит поле ввода с
атрибутом name="username".sendKeys() и click() выполняют
взаимодействие с элементами.Уникальность имени Локатор
by.name() эффективен, когда атрибут name
уникален на странице. Если несколько элементов имеют одинаковый
name, element(by.name('name')) вернёт первый
найденный элемент. Для работы с несколькими элементами используется
element.all(by.name('name')), возвращающий коллекцию
ElementArrayFinder.
Поддержка форм Атрибут name чаще
всего встречается в элементах формы (input,
select, textarea, button). Это
делает by.name() удобным для тестирования регистрации,
авторизации, поиска и других форм.
Сочетание с ожиданиями Часто
by.name() используется вместе с
ExpectedConditions для ожидания появления элемента перед
взаимодействием:
const EC = protractor.ExpectedConditions;
const usernameInput = element(by.name('username'));
await browser.wait(EC.visibilityOf(usernameInput), 5000);
await usernameInput.sendKeys('testuser');
Это предотвращает ошибки, возникающие при попытке работать с элементом, который ещё не отображается на странице.
Если несколько элементов имеют одинаковый атрибут name,
можно получить их все:
const inputs = element.all(by.name('inputField'));
const count = await inputs.count();
console.log('Количество элементов:', count);
await inputs.get(0).sendKeys('Первое значение');
await inputs.get(1).sendKeys('Второе значение');
element.all(by.name('inputField')) создаёт коллекцию
элементов.count() и get(index) позволяют
работать с элементами по индексу.by.id() — ищет элемент по уникальному id.
Обычно быстрее и надёжнее, если id присутствует.by.css() — позволяет использовать селекторы CSS,
включая имя элемента ([name='username']) и другие
атрибуты.by.model() — специфично для AngularJS и связывает
элементы с моделью Angular.by.name() полезен, когда атрибут name уже
присутствует и уникален для целевого элемента, особенно в формах.
name уникально на
странице для точного нахождения элемента.ExpectedConditions.element.all() вместо element().by.css() можно создавать более
сложные селекторы, если один атрибут name встречается в
нескольких местах на странице:element(by.css('form#loginForm [name="username"]'));
Несоответствие атрибута Если атрибут
name указан неверно или динамически меняется, поиск
элемента завершится ошибкой.
Несколько совпадений при использовании
element() Возвращается только первый элемент,
остальные игнорируются. Для работы со всеми элементами следует
использовать element.all().
Игнорирование ожиданий Попытка взаимодействовать
с элементом до его отображения вызывает ошибки
ElementNotVisibleError. Необходимо использовать ожидания
или browser.wait().
by.name()Локатор by.name() обеспечивает удобный способ
взаимодействия с элементами по их атрибуту name, особенно в
формах. Он прост в использовании, интегрируется с другими методами
Protractor и позволяет гибко работать с одиночными и множественными
элементами. При правильном применении этот локатор становится мощным
инструментом для написания стабильных и читаемых тестов.