by.partialLinkText()

Метод by.partialLinkText() в Protractor предназначен для поиска элементов <a> (ссылок) по части текста, который они содержат. Это особенно полезно, когда текст ссылки динамический или длинный, и невозможно или неудобно использовать полное совпадение через by.linkText().

Синтаксис

element(by.partialLinkText('часть текста'))
  • Параметр — строка, содержащая часть текста ссылки.
  • Метод возвращает объект ElementFinder, который можно использовать для дальнейших действий, таких как клик или проверка текста.

Пример использования

const link = element(by.partialLinkText('Подробнее'));
link.click();

В этом примере будет найдено любое <a> на странице, текст которого содержит слово «Подробнее». Если таких ссылок несколько, будет выбран первый элемент в DOM.

Особенности работы

  1. Чувствительность к регистру Поиск чувствителен к регистру символов. Например, by.partialLinkText('Подробнее') и by.partialLinkText('подробнее') — это разные запросы.

  2. Совпадение подстроки Метод ищет именно подстроку. Ссылка с текстом «Узнать подробнее о продукте» будет найдена запросом 'Подробнее'.

  3. Возврат первого элемента Если на странице несколько подходящих ссылок, element(by.partialLinkText()) вернет только первый. Для работы с набором элементов используют element.all(by.partialLinkText()).

Работа с множественными элементами

const links = element.all(by.partialLinkText('Подробнее'));
links.each(function(linkElement, index) {
    linkElement.getText().then(function(text) {
        console.log(`Ссылка ${index}: ${text}`);
    });
});
  • element.all(by.partialLinkText()) возвращает ElementArrayFinder.
  • Методы .each(), .getText(), .count() позволяют перебирать и анализировать все найденные элементы.

Сценарии применения

  • Навигация по страницам с динамическими ссылками, например, новости или каталоги товаров.
  • Тестирование кнопок «Подробнее», «Читать далее», «Узнать больше».
  • Частичное совпадение удобно при изменяемых текстах ссылок (например, добавление даты или имени пользователя).

В сочетании с ожиданиями Protractor

const EC = protractor.ExpectedConditions;
const link = element(by.partialLinkText('Подробнее'));

browser.wait(EC.visibilityOf(link), 5000);
link.click();
  • Использование ExpectedConditions повышает надежность тестов, гарантируя, что элемент видим и доступен для клика перед выполнением действий.

Ограничения и рекомендации

  1. Использовать для ссылок с текстом <a>. Для кнопок <button> или других элементов метод не подходит.
  2. Следует учитывать чувствительность к регистру. При необходимости можно применять .toLowerCase() для сравнения текста после получения через getText().
  3. Для элементов, повторяющихся на странице, лучше использовать element.all() с фильтрацией через .filter() или индекс .get(n).

Совмещение с другими локаторами

Иногда требуется более точный выбор элемента, комбинируя by.partialLinkText() с другими методами:

const link = element(by.cssContainingText('a.special-link', 'Подробнее'));
  • Такой подход позволяет искать элемент с частичным текстом и конкретным классом, что уменьшает риск попадания на неправильную ссылку.

Практические советы

  • Избегать длинных и сложных строк при поиске — лучше использовать уникальные ключевые слова.
  • Для тестов на многоязычных сайтах следует учитывать локализацию текста ссылок.
  • Для динамических страниц, где ссылки появляются после загрузки или AJAX-запросов, всегда применять browser.wait() для надежного поиска.

by.partialLinkText() — удобный инструмент для работы с ссылками в Protractor, обеспечивающий гибкость при выборе элементов по части текста, особенно на динамически меняющихся страницах.