Поиск элементов на странице не имеющих «class» и «id», но содержащих текст (Selenium WebDriver, C#)

Поиск элементов на странице не имеющих class и id, но содержащих текст (Selenium WebDriver, C#)
Рано или поздно при разработке автоматических тестов вы столкнётесь с задачей, когда надо будет найти элемент (html тег), у которого нет атрибутов «class» и «id». Представьте ситуацию, когда на странице есть несколько элементов без «class» и «id» и все они содержат одинаковый текст, но в определённый момент только один из них видимый, а остальные в коде есть, но визуально не видны.

В этом случае можно обращаться к элементу по «By.XPath», но как только разработчик добавит на страницу ещё пару элементов (span, div и т.д.), то ваш «By.XPath» будет уже некорректен и тесты надо будет переписывать.

Я столкнулся с подобной ситуацией, опишу условия. Есть страница и на странице есть ссылки при нажатии на которые всплывают формы для заполнения. Чтобы принять внесённые изменения в форме надо нажать на кнопку «ОК», которая закрывает форму и внесённые данные отображаются на странице. При закрытии форма скрывается, но в коде страницы она присутствует. Таких форм около пяти. У всех форм есть кнопки «ОК». Все кнопки «ОК» реализованы в виде нажатие на кнопки отслеживает JavaScript. Кроме кнопки «ОК» есть кнопки «Очистить» и «Отмена».

Чтобы нажать на нужную нам кнопку надо:
— определить, что она содержит текст «ОК»;
— определить, что она видимая на данный момент.

Для себя я написал простое решение:

Описание строк кода:
строка 4: находим все элементы (теги) на странице.
строка 5: запускаем цикл, который будет выполняться пока не пройдёт по всей коллекции (массиву) найденных элементов, а их всего «iElement.Count».
строка 6: условие, при выполнении которого мы кликнем на требуемый нам элемент, а именно:
— если текущий элемент из коллекции содержит текст «ОК» и…
— если текущий элемент из коллекции видимый.
строка 7: нажимаем на найденный элемент, который удовлетворяет нашему условию, которое задано в строке 6.

Однако надо помнить, что если в коде много мест, где поиск элементов происходит методом перебора, а также если в переборе участвует много элементов, то ваши тесты будут выполняться долго. К примеру, если на странице сотни ссылок и вы в процессе теста многократно ищете нужные ссылки методом перебора, то вы даже визуально будете видеть, как медленно выполняются тесты. Оптимальный вариант — это когда разработчик всем значимым элементам присваивает уникальные «id» и по этим «id» вы будете обращаться к элементам. Просите об этом разработчиков и если они адекватные, то они пойдут вам навстречу.

  • Понравилось? Добавьте в избранное или поделитесь с друзьями:

1 комментарий

  1. Спасибо, зашло с первого тыка 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *