Создание фреймворка и автоматизация тестов на java selenium торрент

Обновлено: 06.07.2024

Несколько инструментов могут управлять веб-браузером так, как это сделал бы реальный пользователь, например, переходя на разные страницы, взаимодействуя с элементами страницы и захватывая некоторые данные. Этот процесс называется Автоматизация веб-браузера . То, что вы можете сделать с автоматизацией веб-браузера, полностью зависит от вашего воображения и потребностей.

Некоторые из распространенных случаев использования автоматизации веб-браузера могут быть:

  • Автоматизация ручных тестов в веб-приложении
  • Автоматизация повторяющихся задач, таких как удаление информации с веб-сайтов
  • Заполнение HTML-форм, выполнение некоторых административных заданий и т. Д

Что такое Селен?

Selenium IDE-это чисто инструмент для воспроизведения записей, который поставляется в качестве плагина Firefox и расширения Chrome. Selenium RC был устаревшим инструментом, который сейчас обесценился. Selenium WebDriver-это новейший и широко используемый инструмент.

Примечание : Термины Selenium , Selenium WebDriver или просто WebDriver используются взаимозаменяемо для обозначения Selenium WebDriver.

Здесь важно отметить, что Selenium создан только для взаимодействия с веб-компонентами. Поэтому, если вы столкнетесь с какими-либо настольными компонентами, такими как диалоговое окно Windows, Selenium сам по себе не сможет взаимодействовать с ними. Существуют и другие типы инструментов, такие как AutoIt или Automa, которые могут быть интегрированы с Selenium для этих целей.

Зачем использовать Селен?

В этом уроке мы узнаем, как использовать привязки Java Selenium WebDriver . Мы также рассмотрим API WebDriver .

Успех Selenium также можно объяснить тем фактом, что спецификации WebDriver стали рекомендацией W3C для браузеров.

Предпосылки:

  • Среда Java и ваша любимая среда разработки Java

WebDriver обеспечивает привязку для всех популярных языков, как описано в предыдущем разделе. Поскольку мы используем среду Java, нам необходимо загрузить и включить привязки Java в путь сборки. Кроме того, почти каждый популярный браузер предоставляет драйвер, который можно использовать с Selenium для управления этим браузером.

В этом уроке мы будем управлять Google Chrome.

Веб-драйвер

Прежде чем двигаться дальше, полезно понять несколько концепций, которые приводят в замешательство новичков. WebDriver не является классом , это интерфейс .

Все зависящие от браузера драйверы, такие как ChromeDriver , FirefoxDriver , InternetExplorerDriver , являются Java классами , которые реализуют интерфейс WebDriver|/. Эта информация важна, потому что, если вы хотите запустить свою программу в другом браузере, вам не нужно менять кучу кода, чтобы он работал, вам просто нужно поменять WebDriver для любого браузера, который вы хотите.

Как мы видим, драйвер содержит ссылку на ChromeDriver и, следовательно, может использоваться для управления браузером. Когда будет выполнено приведенное выше утверждение, вы должны увидеть, как в вашей системе откроется новое окно браузера. Но браузер еще не открыл ни одного веб-сайта. Нам нужно дать указание браузеру сделать это.

Примечание : Для использования другого WebDriver вам необходимо указать путь к драйверу в файловой системе, а затем создать его экземпляр. Например, если вы хотите использовать IE, то вот что вам нужно сделать:

Переход на Веб-сайт

Как упоминалось выше, сначала нам нужно перейти на ваш целевой веб-сайт. Для этого мы просто отправляем запрос GET на URL-адрес веб-сайта:

ВебЭлемент

Первым шагом в автоматизации веб-браузера является поиск элементов на веб-странице, с которыми мы хотим взаимодействовать, таких как кнопка, ввод, выпадающий список и т.д.

Селеновым представлением таких HTML-элементов является Веб-элемент . Как и WebDriver , WebElement также является интерфейсом Java. Как только мы получим WebElement , Мы сможем выполнить с ними любую операцию, которую может выполнить конечный пользователь, например, щелкнуть, ввести, выбрать и т. Д.

Очевидно, что попытка выполнить недопустимые операции, например, ввести текст в элемент кнопки, приведет к исключению.

Мы можем использовать HTML-атрибуты элемента, такие как идентификатор , класс и имя , чтобы найти элемент. Если таких атрибутов нет, мы можем использовать некоторые продвинутые методы определения местоположения, такие как CSS-селекторы и XPath .

Как мы видим, элемент имеет <вход> тег и несколько атрибутов, таких как идентификатор , класс и т.д.

WebDriver поддерживает 8 различных локаторов для поиска элементов:

  • идентификатор
  • Имя класса
  • имя
  • тагНаме
  • Текст ссылки
  • Частичная ссылка на текст
  • cssSelector*
  • xpath

Давайте рассмотрим их все по очереди, автоматизировав различные элементы на нашем целевом веб-сайте.

Определение местоположения элементов с помощью идентификатора

Если мы проверим поле ввода информационного бюллетеня на нашем целевом веб-сайте, мы сможем обнаружить, что у него есть атрибут id :

Мы можем найти этот элемент с помощью идентификатора локатора:

Поиск элементов по имени класса

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

Мы можем найти этот элемент, используя имя класса локатор:

Определение местоположения элементов по имени

Для этого примера давайте представим выпадающий список, в котором пользователь должен выбрать свой возрастной диапазон. В раскрывающемся списке есть атрибут name , который мы можем найти:

Мы можем найти этот элемент, используя имя локатор:

Определение местоположения элементов с помощью xpath

Однако иногда эти подходы устаревают, так как существует несколько элементов с одним и тем же атрибутом:

В этих случаях мы можем использовать Локаторы XPath . XPath-это очень мощные локаторы, и они сами по себе являются полной темой. Следующий пример может дать вам представление о том, как создать XPath для приведенных выше фрагментов HTML:

Поиск элементов с помощью селектора css

Опять же, давайте представим список флажков, в которых пользователь выбирает предпочитаемый язык программирования:

Технически, для этого фрагмента HTML мы можем легко использовать имя локатор, поскольку они имеют разные значения. Однако в этом примере мы будем использовать селекторы css для поиска этого элемента, который широко используется во интерфейсе с такими библиотеками, как jQuery.

Следующий пример может дать вам представление о том, как создавать селекторы CSS для предыдущего фрагмента HTML:

Очевидно, это очень похоже на подход XPath.

Поиск элементов с помощью linkText

Мы можем найти ссылку по ее тексту:

Поиск элементов с помощью partialLinkText

В этих случаях мы можем использовать partialLinkText локатор:

Определение местоположения элементов с помощью tagName

Мы также можем найти элемент, используя его имя тега, например , , <ввод> , <выбор> и т. Д. Вы должны использовать этот локатор с осторожностью. Поскольку может быть несколько элементов с одинаковым именем тега, и команда всегда возвращает первый соответствующий элемент на странице:

Этот способ поиска элемента обычно более полезен, когда вы вызываете метод findElement для другого элемента, а не для всего HTML-документа. Это сужает ваш поиск и позволяет находить элементы с помощью простых локаторов.

Взаимодействие с элементами

Щелчок по элементам

Мы выполняем операцию щелчка с помощью метода click () . Мы можем использовать это на любом веб-элементе , если он доступен для кликабельности. Если нет, это вызовет исключение.

В этом случае давайте перейдем по ссылке домашняя страница :

Поскольку это фактически выполняет щелчок по странице, ваш веб-браузер затем перейдет по ссылке, которая была нажата программным способом.

Ввод Текста

Давайте введем некоторый текст в поле ввода Электронная почта :

Выбор Переключателей

Поскольку переключатели просто нажимаются, мы используем метод click() для выбора одной из них:

Установка Флажков

То же самое касается выбора флажков, хотя в этом случае мы можем выбрать несколько флажков. Если мы выберем другой переключатель, будет выбран предыдущий:

Выбор элементов из выпадающего списка

Чтобы выбрать элемент из выпадающего списка, нам нужно будет сделать две вещи:

Во-первых, нам нужно создать экземпляр Выбрать и передать ему элемент со страницы:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Затем мы можем выбрать элемент, используя его:

Отображаемый текст :

Значение (атрибут значение ):

Индекс (начинается с 0):

Если приложение поддерживает множественный выбор, мы можем вызвать один или несколько из этих методов несколько раз, чтобы выбрать различные элементы.

Чтобы проверить, позволяет ли приложение выполнять несколько вариантов выбора, мы можем запустить:

Есть много других полезных операций, которые мы можем выполнить в раскрывающемся списке:

Мы также можем сделать это с помощью Select :

Получение Значений Атрибутов

Чтобы получить значение определенного атрибута в элементе:

Установка Значений Атрибутов

Мы также можем задать значение определенного атрибута в элементе. Это может быть полезно там, где мы хотим включить или отключить какой-либо элемент:

Взаимодействие с мышью и клавиатурой

API WebDriver предоставил класс Действия для взаимодействия с мышью и клавиатурой.

Во-первых, нам нужно создать экземпляр Действия и передать ему экземпляр WebDriver :

Перемещение мыши

Иногда нам может потребоваться навести курсор на пункт меню, в котором отображается пункт подменю:

Перетаскивание

Перетаскивание элемента поверх другого элемента:

Перетаскивание элемента на несколько пикселей (например, 200 пикселей по горизонтали и 0 пикселей по вертикали):

Нажатие Клавиш

Удерживайте определенную клавишу при вводе некоторого текста, например, клавиши Shift :

Выполните такие операции, как Ctrl+a , Ctrl+c , Ctrl+v и ВКЛАДКА :

Взаимодействие с браузером

Получение источника страницы

Скорее всего, вы будете использовать это для очистки веб-страниц:

Получение заголовка страницы

Максимизация браузера

Увольнение водителя

Важно выйти из драйвера в конце программы:

Примечание : API WebDriver также предоставляет метод close () , и иногда это сбивает с толку новичков. Метод close() просто закрывает браузер и может быть снова открыт в любое время. Это не уничтожает объект WebDriver . Метод quit() более подходит, когда вам больше не нужен браузер.

Делать Скриншоты

Во-первых, нам нужно привести WebDriver к TakesScreenshot типу, который является интерфейсом . Далее мы можем вызвать getScreenshotAs() и передать OutputType.ФАЙЛ .

Наконец, мы можем скопировать файл в локальную файловую систему с соответствующими расширениями, такими как *.jpg,*. png и т.д.

Выполнение JavaScript

Мы также можем ввести или выполнить любой допустимый фрагмент JavaScript через Selenium WebDriver. Это очень полезно, так как позволяет вам делать многие вещи, которые не встроены непосредственно в Селен.

Во-первых, нам нужно привести WebDriver к типу JavascriptExecutor :

Может быть несколько вариантов использования, связанных с JavascriptExecutor :

Мы также можем сначала найти элемент с помощью локаторов WebDriver и передать этот элемент в execute Script() в качестве второго аргумента. Это более естественный способ использования JavascriptExecutor :

Чтобы задать значение поля ввода:

  • Прокрутка элемента, чтобы перенести его в окно просмотра :
  • Изменение страницы (добавление или удаление некоторых атрибутов элемента):

Доступ к файлам Cookie

Поскольку многие веб-сайты используют файлы cookie для хранения состояния пользователя или других данных, вам может быть полезно получить к ним программный доступ с помощью Selenium. Некоторые распространенные операции с файлами cookie описаны ниже.

Получить все файлы cookie:

Получите конкретный файл cookie:

Добавьте файл cookie:

Удалите файл cookie:

Вывод

Мы рассмотрели все основные функции Selenium WebDriver, которые могут потребоваться при автоматизации веб-браузера. Selenium WebDriver имеет очень обширный API и охватывает все, что выходит за рамки этого руководства.

Цель - в качестве практики написать тестовую модель по UI почты маил ру и автоматизировать подходящие под это дело тесты. Надо набивать руку, т.к. скоро намечается работа на должности автотестера.

Стек - java+seleniumWebDriver+pageObject+testng

Пока только 3 тестика написал, и нужно понять, архитектурно и синтаксически правильно ли я всё делаю, чтобы можно было продолжать.

Что планирую добавить и какие проблемы решить:

  1. Убрать Thred.sleep-ы, корректно обработать ожидания появления/скрытия элементов
  2. Написать более интуитивно понятные названия методов, переменных.
  3. Вынести некоторые захардкоженные значения.
  4. Добавить какой нибудь конфигуратор отчетов - allure, например.
  5. Добавить в итоговой реализации cucumber.

1. Правильно ли я применил паттерн Page Object в принципе? Возможно, какие-то недочеты есть?

2. При создании письма на странице с общим списком писем всплывает попап нового письма. Он как бы находится на странице с общим списком писем, но также это сам по себе значительный элемент с большим кол-вом тестов. Поэтому я вынес его, как отдельную страницу. Это правильно? Или нужно было создать внутренний класс этого попапа в EmailsListPage (классе страницы с общим списком писем)?

3. Я узнаю на какой странице нахожусь по следующему явному ожиданию, который я добавил в конструктор каждой страницы. Правильно ли это?

4. Во многих случаях я возвращаю объект страницы. Не избыточно ли это? Насколько я понимаю, драйвер и без этого понимает, что на странице произошли изменения, т.е. мне не нужно присваивать переменной страницы, с которой я буду работать дальше, возвращенный методом объект страницы.

5. В тестах, собственно, указал тестовые методы с помощью аннотаций @Test. Соответственно подготовительные действия перед каждым тестом я пометил с помощью @BeforeTest и @AfterTest соответственно. Но при запуске всего класса с тестами в таком случае @BeforeTest происходит однократно и все тесты одновременно в этом окне пытаются выполниться. Почему так может происходить? (проблема решилась тем, что фикстуры пометил как @BeforeMethod и @AfterMethod )

6. Какие нибудь тестовые данные (ссылки, названия кнопок, названия страниц и тд) наверняка можно вынести в какие-нибудь property файлы. Вот как это к проекту присобачить? Чтобы доставать из файлика, например, по getProperty(baseUrl) данные.

7. Этой строке место в классе с тестами? Может это можно указать где-то в настройках проекта?

8. Планирую реализовать тестики и использовать окружение, библиотеки, инструменты максимально близкие к тем, что используются на реальных проектах. Что тут еще можете посоветовать, к чему стремиться? Стек точно java+selenium+pageObject+testNG+allure. Селениду позже буду осваивать.

9. Возможно еще есть какие-то архитектурные или синтаксические недочеты? Может что-то куда-то вынести можно или нужно?

Автоматизация тестирования (JAVA QA Automation) для тестировщиков за 2 месяца

Теория -
актуальные материалы и кейсы от преподавателей практиков, никакой "воды"

Выполнение практических заданий
для закрепления материала, после каждого занятия. Написание авто тестов

ПРИОБРЕТЕНИЕ навыков
на реальных проектах

Support
поддержка и дополнительные консультации преподавателей

Расписание курса

Цена (оплата частями) :

Два раза в неделю


Программа курса " Автоматизация тестирования Java + Selenium"

Вводная часть

Что такое автоматизация

Как и что автоматизировать

Подходы и методики автоматизации

Обзор возможностей фреймворка Selenium

Основы Java / OOP

Работа с локаторами

Инструменты отладки в браузерах

Нахождение и работа с элементами по XPath / CSS

Selenium WebDriver

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

Написание функциональных тестов

Написание end to end

Junit / TestNg

Обзор и настройка тестовых фреймворков

CI : Git + jenkins

Запуск тестов при помощи CI

Reporting

Логирование и выведение результатов теста

Page Object + Паттерны

Оптимизация и упрощение кода

Способы написания тестов легкими в поддержке и чтении

Трендовые вещи в веб атоматизации, TestNg + selenide

Обзор врапера Selenide для Selenium

Быстрый способ развернуть автоматизацию на проекте

Что вы сможете пос ле окончания курса "автоматизация тестирования"?

Вы сможете создавать автоматизированные тесты с помощью Java + Selenium WebDriver

Сможете организовать тестирования веб-приложений не погружаясь в программирование

Сможете разработать собственный фреймворк

Получите старт для Вашего дальнейшего развития как Automation QA Engineer

Презентация на тему: " Frameworks Игорь Хрол. План Проблемы автоматизации Что такое фреймворк? Как он решает проблемы? Некоторые практики с фреймворка на Selenium RC." — Транскрипт:

1 Frameworks Игорь Хрол

2 План Проблемы автоматизации Что такое фреймворк? Как он решает проблемы? Некоторые практики с фреймворка на Selenium RC

3 Проблемы автоматизации В конце цикла разработки – много зависимостей Изменения UI Изменение бизнес-логики и тест-кейсов BA DEV QA Auto QA

4 Что такое Framework? Каркас, структура, сфера деятельности В информационных системах структура программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта. Спасибо, Википедия

5 Зачем нужен Framework? Ре-использование кода – Решение проблем одним изменением – Уменьшение количества изобретателей «велосипедов»

6 Layering Подход к построению архитектуры системы

7 UI Layer Цель: контролировать изменения UI Примеры: – Хранилище локаторов – Object Repository в QTP – Name Mapping в TestComplete – UI-Element в Selenium IDE

8 Business components layer Цель: контролировать изменения бизнес- логики Примеры: – Reusable Actions в QTP – Functions в TestComplete или любом другом инструменте

9 Utilities Цель: вспомогательная Примеры: – Логгирование – Работа с базой данных – Чтение настроек и тестовых данных

10 Типичная схема AUT / SUT Utilities layer UI layer Business layer Test scripts

11 KISS Используйте готовые решения Усложняйте архитектуру тогда, когда это нужно Старайтесь делать всё проще и очевидно

13 Запуск тестов из командной строки Ant ( – Запуск selenium server – Компиляция исходных кодов – Запуск тестов – Остановка selenium server

14 Как хранить общий доступ к selenium? Передавать каждой функции Инициализировать изначально и использовать статическое поле для обращения к нему

15 Базовый класс для всех тест кейсов

16 Структура тест-кейса Preconditions Test case Cleanup FlowPreconditionsMainCleanup SuccessfulPassed Failed cleanupPassed Failed Failed test casePassedFailedPassed/Failed Failed preconditionsFailedNot runPassed/Failed

18 Где хранить тестовые данные? Excel CSV-файлы База данных XML

19 Excel-хранилища данных Табличные данные на каждом sheet Key-value пары в столбец Именованные диапазоны Чем читать excel? – JDBC ( jdbc-connect-ms-excel.html) jdbc-connect-ms-excel.html – POI (

20 Где хранить локаторы? Поля классов

21 Где хранить локаторы? Поля интерфейсов

23 Структура UI Layer Разбивка на страницы Сбор «особенных» UI элементов в отдельные классы: – Различные кастомизированные кнопки-поля (нужно вызывать специальные события) – Upload-download файлов Иерархия объектов (GWT, например)

24 Структура Business Layer Набор статических методов, объединённых по классам Чем проще, тем лучше

25 Tracebility с ручным тестированием Соотнесение тест-кейсов Соотнесение тестовых шагов Интеграция с существующей отчётностью – HP Quality Center – TestLink – JIRA

26 Отчёты HTML Группировка по test suite и test case Screenshots Максимально user friendly При возможности – интеграция с существующей системой отчётности

27 Screenshots void captureScreenshot (String filename); Обычно делается во время ошибки – Try-catch в BaseTest – Listener в JUnit 06/24/capturing-screen-shots-of- browsers-with-selenium-and-cloud- testing-part-1/ 06/24/capturing-screen-shots-of- browsers-with-selenium-and-cloud- testing-part-1/

В этой статье рассматривается создание достаточного простого автотеста. Статья будет полезна начинающим автоматизаторам.

Материал изложен максимально доступно, однако, будет значительно проще понять о чем здесь идет речь, если Вы будете иметь хотя бы минимальные представления о языке Java: классы, методы, etc.

  • установленная среда разработки Intellij IDEA (является самой популярной IDE, для большинства случаев достаточно бесплатной версии Community Edition);
  • установленные Java (jdk/openjdk) и Maven, прописанные в системные окружения ОС;
  • браузер Chrome и chromedriver — программа для передачи команд браузеру.

Создание проекта

Запустим Intellij IDEA, пройдем первые несколько пунктов, касающихся отправки статистики, импорта проектов, выбора цветовой схемы и т.д. — просто выберем параметры по умолчанию.

В появившемся в конце окне выберем пункт «Create New Project», а в нем тип проекта Maven. Окно будет иметь вид:

image

  • Maven — это инструмент сборки Java проектов;
  • Project SDK — версия Java, которая установлена на компьютере;
  • Create from archetype — это возможность создавать проект с определенным архетипом (на данном этапе данный чекбокс отмечать не нужно).

Нажмем «Next». Откроется следующее окно:

image

Groupid и Artifactid — идентификаторы проекта в Maven. Существуют определенные правила заполнения этих пунктов:

  • Groupid — название организации или подразделения занимающихся разработкой проекта. В этом пункте действует тоже правило как и в именовании пакетов Java: доменное имя организации записанное задом наперед. Если у Вас нет своего доменного имени, то можно использовать свой э-мейл, например com.email.email;
  • Artifactid — название проекта;
  • Version — версия проекта.

Нажмем «Finish»: IDE автоматически откроет файл pom.xml:

image

В нем уже появилась информация о проекте, внесенная на предыдущем шаге: Groupid, Artefiactid, Version. Pom.xml — это файл который описывает проект. Pom-файл хранит список всех библиотек (зависимостей), которые используются в проекте.

image

Выберем нужную версию (в примере будет использована версия 3.14.0). Откроется страница:

image

Копируем содержимое блока «Maven» и вставим в файл pom.xml в блок

Таким образом библиотека будет включена в проект и ее можно будет использовать. Аналогично сделаем с библиотекой Junit (будем использовать версию 4.12).

image

Создание пакета и класса

Раскроем структуру проекта. Директория src содержит в себе две директории: «main» и «test». Для тестов используется, соответственно, директория «test». Откроем директорию «test», кликом правой клавиши мыши по директории «java» выберем пункт «New», а затем пункт «Package». В открывшемся диалоговом окне необходимо ввести название пакета. Имя базового пакета должно носить тоже имя, что и Groupid — «org.example».

Следующий шаг — создание класса Java, в котором пишется код автотеста. Кликом правой клавиши мыши по названию пакета выберем пункт «New», а затем пункт «Java Class».

В открывшемся диалоговом окне необходимо ввести имя Java класса, например, LoginTest (название класса в Java всегда должно начинаться с большой буквы). В IDE откроется окно тестового класса:

image

Настройка IDE

Прежде чем начать, необходимо настроить IDE. Кликом правой клавиши мыши по названию проекта выберем пункт «Open Module Settings». В открывшемся окне во вкладке «Sources» поле «Language level» по умолчанию имеет значение 5. Необходимо изменить значение поля на 8 (для использования всех возможностей, присутствующих в этой версии Java) и сохранить изменения:

image

Далее необходимо изменить версию компилятора Java: нажмем меню «File», а затем выберем пункт Settings.

В открывшемся перейдем «Build, Execution, Deployment» -> «Compiler» -> «Java Compiler». По умолчанию установлена версия 1.5. Изменим версию на 8 и сохраним изменения:

image

Test Suite

  1. Пользователь открывает страницу аутентификации;
  2. Пользователь производит ввод валидных логина и пароля;
  3. Пользователь удостоверяется в успешной аутентификации — об этом свидетельствует имя пользователя в верхнем правом углу окна;
  4. Пользователь осуществляет выход из аккаунта путем нажатия на имя пользователя в верхнем правом углу окна с последующим нажатием на кнопку «Выйти…».

Тест считается успешно пройденным в случае, когда пользователю удалось выполнить все вышеперечисленные пункты.

Для примера будет использоваться аккаунт Яндекс (учетная запись заранее создана вручную).

Первый метод

В классе LoginTest будет описана логика теста. Создадим в этом классе метод «setup()», в котором будут описаны предварительные настройки. Итак, для запуска браузера необходимо создать объект драйвера:

Перед созданием объекта WebDriver следует установить зависимость, определяющую путь к chomedriver (в ОС семейства Windows дополнительно необходимо указывать расширение .exe):

Чтобы ход теста отображался в полностью открытом окне, необходимо сказать об этом драйверу:

Случается, что элементы на страницах доступны не сразу, и необходимо дождаться появления элемента. Для этого существуют ожидания. Они бывают двух видов: явные и неявные. В примере будет использовано неявное ожидание Implicitly Wait, которое задается вначале теста и будет работать при каждом вызове метода поиска элемента:

Таким образом, если элемент не найден, то драйвер будет ждать его появления в течении заданного времени (10 секунд) и шагом в 500 мс. Как только элемент будет найден, драйвер продолжит работу, однако, в противном случае тест упадем по истечению времени.

Для передачи драйверу адреса страницы используется команда:

Выносим настройки

Для удобства вынесем название страницы в отдельный файл (а чуть позже и некоторые другие параметры).

Создадим в каталоге «test» еще один каталог с названием «resources», а в нем обычный файл «conf.properties», в который поместим переменную:

а также внесем сюда путь до драйвера

image

В пакете «org.example» создадим еще один класс «ConfProperties», который будет читать записанные в файл «conf.properties» значения:

image

Обзор первого метода

image

Метод «setup()» пометим аннотацией Junit «@BeforeClass», которая указывает на то, что метод будет выполняться один раз до выполнения всех тестов в классе. Тестовые методы в Junit помечаются аннотацией Test.

Page Object

При использовании Page Object элементы страниц, а также методы непосредственного взаимодействия с ними, выносятся в отдельный класс.

Создадим в пакете «org.example» класс LoginPage, который будет содержать локацию элементов страницы логина и методы для взаимодействия с этими элементами.

В результате мы увидим этот элемент среди множества других. Теперь мы можем скопировать его локацию. Для этого кликаем правой кнопкой мыши по выделенному в панели разработчика элементу, выбираем меню «Copy» -> «Copy XPath».

Для локации элементов в Page Object используется аннотация @FindBy.

Напишем следующий код:

Таким образом мы нашли элемент на страницу и назвали его loginField (элемент доступен только внутри класса LoginPage, т.к. является приватным).

Однако, такой длинный и страшный xpath использовать не рекомендуется (рекомендую к прочтению статью «Не так страшен xpath как его незнание». Если присмотреться, то можно увидеть, что поле ввода логина имеет уникальный id:

image

Воспользуемся этим и изменим поиск элемента по xpath:

Теперь вероятность того, что поле ввода пароля будет определено верно даже в случае изменения местоположения элемента на странице, возросла.

Аналогично изучим следующие элементы и получим их локаторы.

Поле ввода пароля:

А теперь напишем методы для взаимодействия с элементами.

Метод ввода логина:

Метод ввода пароля:

Метод нажатия кнопки входа:

Для того, чтобы аннотация @FindBy заработала, необходимо использовать класс PageFactory. Для этого создадим конструктор и передадим ему в качестве параметра объект Webdriver:

image

После авторизации мы попадаем на страницу пользователя. Т.к. это уже другая страница, в соответствии с идеологией Page Object нам понадобится отдельный класс для ее описания. Создадим класс ProfilePage, в котором определим локаторы для имени пользователя (как показателя успешного входа в учетную запись), а также кнопки выхода из аккаунта. Помимо этого, напишем методы, которые будут получать имя пользователя и нажимать на кнопку выхода.

Итого, страница будет иметь следующий вид:

image

Интересный момент: в метод getUserName() пришлось добавить еще одно ожидание, т.к. страница «тяжелая» и загружалась довольно медленно. В итоге тест падал, потому что метод не мог получить имя пользователя. Метод getUserName() с ожиданием:

Вернемся к классу LoginTest и добавим в него созданные ранее классы-страницы путем объявления статических переменных с соответствующими именами:

Сюда же вынесем переменную для драйвера

В аннотации @BeforeClass создаем экземпляры классов созданных ранее страниц и присвоим ссылки на них. Создание экземпляра происходит с помощью оператора new. В качестве параметра указываем созданный перед этим объект driver, который передается конструкторам класса, созданным ранее:

А создание экземпляра драйвера приведем к следующему виду (т.к. он объявлен в качестве переменной):

Теперь можно перейти непосредственно к написанию логики теста. Создадим метод loginTest() и пометим его соответствующей аннотацией:

Осталось лишь корректно все завершить. Создадим финальный метод и пометим его аннотацией @AfterClass (методы помеченные этой аннотацией выполняются один раз, после завершения всех тестовых методов класса).

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

Последняя строка нужна для закрытия окна браузера.

Обзор теста

Запуск автотеста

Для запуска автотестов в Intellij Idea имеется несколько способов:

  • Alt+Shift+F10;
  • Клик правой клавишей мышки по имени тестового класса, после чего в открывшемся меню выбрать Run;

В результате выполнения автотеста, в консоли Idea я вижу, что тестовый метод loginTest() пройден успешно:

Читайте также: