Метод by.tagName() является одним из локаторов,
предоставляемых библиотекой Protractor для идентификации элементов на
веб-странице по имени HTML-тега. Это один из наиболее базовых способов
поиска элементов, который позволяет работать с элементами на уровне
структуры DOM без привязки к классам, идентификаторам или атрибутам.
element(by.tagName('tag_name'))
tag_name — строка, содержащая имя
HTML-тега, например: 'input', 'button',
'div', 'span'.Для поиска нескольких элементов используется:
element.all(by.tagName('tag_name'))
count(), get(index),
each().Пример 1: Поиск одиночного элемента
let loginButton = element(by.tagName('button'));
loginButton.click();
В этом случае будет найден первый элемент <button>
на странице, и выполнено действие click().
Пример 2: Поиск всех элементов определённого тега
let inputs = element.all(by.tagName('input'));
console.log(inputs.count());
inputs.each(function(input) {
input.sendKeys('Test');
});
count() возвращает количество найденных элементов.each() позволяет применить функцию к каждому найденному
элементу.Пример 3: Комбинация с другими локаторами
Метод by.tagName() часто используют в сочетании с
методами фильтрации:
let buttons = element.all(by.tagName('button')).filter(function(button) {
return button.getText().then(function(text) {
return text === 'Submit';
});
});
buttons.first().click();
filter(), чтобы выбрать элементы по
тексту.first() возвращает первый элемент из отфильтрованного
списка.by.tagName() ищет только элементы по имени
тега, не учитывая классы, идентификаторы или другие
атрибуты.by.css('div input') или
element(by.tagName('form')).element(by.tagName('input')).element.all(by.tagName()) может быть
полезен для подсчета элементов или массовых действий, но нужно учитывать
производительность на страницах с большим количеством однотипных
тегов.| Локатор | Особенности |
|---|---|
by.id() |
Поиск по уникальному идентификатору; самый быстрый способ |
by.className() |
Поиск по имени класса; работает для множества элементов |
by.css() |
Гибкий, позволяет комбинировать селекторы и псевдоклассы |
by.tagName() |
Простой поиск по тегу; удобно для базовой структуры DOM |
by.xpath() |
Позволяет сложные выражения; медленнее, сложнее поддерживать |
Автоматизация форм Поиск всех полей ввода
<input> для заполнения формы:
let inputs = element.all(by.tagName('input'));
inputs.get(0).sendKeys('username');
inputs.get(1).sendKeys('password');Навигация по спискам Получение всех элементов
<li> для проверки содержимого списка:
let items = element.all(by.tagName('li'));
items.each(function(item) {
item.getText().then(function(text) {
console.log(text);
});
});Работа с таблицами Извлечение всех ячеек
<td> таблицы:
let cells = element.all(by.tagName('td'));
cells.each(function(cell) {
cell.getText().then(function(text) {
console.log(text);
});
});Метод by.tagName() можно использовать для поиска
внутри другого элемента:
let form = element(by.tagName('form'));
let usernameInput = form.element(by.tagName('input'));
usernameInput.sendKeys('testuser');
Все методы возвращают объекты ElementFinder или
ElementArrayFinder, которые работают с
Promise. Для получения значения необходимо использовать
then() или синтаксис async/await:
let buttons = await element.all(by.tagName('button'));
let count = await buttons.count();
console.log(count);
Использование async/await делает код более читаемым и
упрощает обработку результатов поиска элементов.
by.tagName()element.all() и фильтрацией.Метод by.tagName() обеспечивает прямой доступ к
элементам DOM на уровне тегов и является удобным инструментом для
простых и повторяющихся задач в тестировании интерфейсов.