Selenium поиск текста на странице

Ковыряю тестирование, есть два файла в проекте page и test соответсвенно, я не уверен, что верно написал тест, ровно как и не уверен, что нормально создал архитектуру проекта (моим знания по тестированию около 5 часов).

При этом имею при запуске Test_TS001.py: https://pastebin.com/6exM1E4T

Тестовые данные в файле conf.json:

Вопрос: почему не работает этот тест? (я проверяю на наличие текста text в поле с классом "piereg_login_error"). Или нужно использовать re?

ps. Пробовал также driver.page_source вместо конкретного поля — та же ошибка.

pps. Если нетрудно укажите на неточности, допущенные в работе.

2 ответа 2

find_elements_by_class_name возвращает список элементов. Если вы знаете, что у вас точно один такой элемент на странице, то используйте find_element_by_class_name . А чтобы получить текст внутри элемента, нужно использовать атрибут text . Чтобы заработало, вашу проверку нужно записать так:

Но это лишь локальное решение проблемы. Ваше опасение

что нормально создал архитектуру проекта

вполне обоснованно. Что бы я поменял:

  1. Убрать инциализацию объекта класса из PAGE_TS001.py
  2. В __init__() оставить только инициализацию драйвера
  3. Парсинг конфига вообще сделать в отдельном файле (чтобы отделить логику и данные). Обычно называют data_providers.py .
  4. Шаги по регистрации нужно в самом тесте делать, но без поиска контролов. В идеале еще можно логику отдельно вынести, но это можно на более поздних этапах обучения написанию автотестов

В общем, тест должен выглядеть как-то так:

Еще рекомендую изучить явные ожидания и вставить их в нужных местах в методах класса DemoQA

Как вы, возможно, уже поняли, чтобы управлять элементами страницы, нам нужно сначала найти их. Selenium использует так называемые локаторы, чтобы находить элементы на веб-странице.

В Selenium есть 8 методов которые помогут в поиске HTML элементов:

Читайте также:  Ауди 80 или фольксваген гольф

Для поиска элементов в Selenium используются локаторы. Локатор – это строка, уникально идентифицирующая элемент страницы. WebDriver предоставляет несколько способов использования локаторов для поиска элементов:

  • By.id – в качестве локатора используется атрибут id элемента страницы;
  • By.name – в качестве локатора используется атрибут name элемента страницы;
  • By.xpath – используется для поиска элемента по XPath выражению;
  • By.tagName – поиск по имени HTML тега;
  • By.className – поиск по классу(атрибут class ) элемента;
  • By.cssSelector – данный тип локаторов основан на описаниях таблиц стилей (CSS);
  • By.linkText – поиск ссылки с указанным текстом. Текст ссылки должен быть точным совпадением;
  • By.partionalLinkText – поиск ссылки по части с указанным текстом.

В WebDriver реализованы два метода — findElement и findElements . В качестве параметра они принимают объект типа By , который задает критерий поиска.

  • java.util.ListfindElements(By by) — находит все элементы в текущем контексте, идентифицированные классом By. На время его выполнения влияет implicit wait (неявные ожидания). При выполнении неявного ожидания, метод вернет список сразу же, как только будет найден хоть один элемент, или вернет пустой список, если время ожидания истекло.
  • WebElementfindElement(By by) — находит первый, удовлетворяющий условиям поиска, элемент на странице. На время выполнения этого метода также влияют неявные ожидания. Если элемент не найден сразу, то метод будет вызываться повторно пока не истечет время ожидания. Если же ничего найти не удалось, будет выдано исключение NoSuchElementException . Поэтому не используйте findElement для проверки отсутствия элементов, вместо этого можно использовать метод findElements и проверку на нулевое количество полученных элементов.

Обратите внимание, что для первой ссылки использовать такой локатор нельзя. Метод findElement(By.linkText("Первая ссылка")) не найдет ни одного элемента. Потому, что искомый текст должен содержаться непосредственно в теге . Первую ссылку можно получить используя, например, className или xpath:

Читайте также:  Call of duty advanced warfare системные требования

Поисковые запросы можно выстраивать в цепочку:

В тоже время найти такой элемент можно с помощью, например, XPath запроса. Что лучше использовать для такого поиска — сложный XPath/CSS запрос или цепочку простых запросов — решать только вам.
Сложный запрос получается более коротким и емким, и его можно предварительно отладить с помощью дополнительных инструментальных средств. Цепочки получаются достаточно длинными (чем сложнее запрос, тем длиннее будет цепочка) и их нельзя отладить перед использованием. Но есть и свои плюсы — если во время выполнения поиска не найден какой-либо элемент, цепочка более точно сообщит о том, что именно не нашлось.

Rate this post

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

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