Selenium руководство на русском

Время на прочтение
5 мин

Количество просмотров 440K

Представляю перевод неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.

Предисловие от автора статьи

Selenium WebDriver – это программная библиотека для управления браузерами. WebDriver представляет собой драйверы для различных браузеров и клиентские библиотеки на разных языках программирования, предназначенные для управления этими драйверами.

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

Библиотеки WebDriver доступны на языках Java, .Net (C#), Python, Ruby, JavaScript, драйверы реализованы для браузеров Firefox, InternetExplorer, Safari, Andriod, iOS (а также Chrome и Opera).

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

Чаще всего Selenium WebDriver используется для тестирования функционала веб-сайтов/веб-ориентированных приложений. Автоматизированное тестирование удобно, потому что позволяет многократно запускать повторяющиеся тесты. Регрессионное тестирование, то есть, проверка, что старый код не перестал работать правильно после внесения новых изменений, является типичным примером, когда необходима автоматизация. WebDriver предоставляет все необходимые методы, обеспечивает высокую скорость теста и гарантирует корректность проверки (поскольку человеский фактор исключен). В официальной документации Selenium приводятся следующие плюсы автоматизированного тестирования веб-приложений:

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

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

Также одной из незаменимых особенностей Selenium WebDriver является ожидание загрузки страницы. Сюда можно отнести случаи, когда парсинг данных на странице невозможен из-за страниц перенаправления или ожидания, содержащих примерно такой текст: «Подождите, страница загружается». Такие страницы, само собой разумеется, не является целью парсинга, однако обойти их часто не представляется возможным. Естественно, без Selenium WebDriver. Selenium WebDriver позволяет в таких случаях «ожидать», как ожидал бы человек, пока на странице, к примеру, не появится элемент с необходимым именем.

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

Некоторые проблемы WebDriver (из сети и личного опыта):

  • бывает, что поведение отличается в разных браузерах;
  • иногда возникают сложности с поиском элементов (XPath и другие методы иногда просто не работают, хотя должны);
  • необъяснимые падения драйвера прямо посреди теста;
  • взаимодействие возможно только с первой вкладкой браузера, драйвер позволяет открывать новые вкладки и новые окна, но не позволяет в них работать;
  • необходимо четко продумывать архитектуру теста, часто использовать assert или ожидания, чтобы тест умел «думать», когда делать и когда нет.

Подробнее о проекте Selenium и серии их ПО можно прочитать здесь, либо в официальной документации или ее переводе.

Содержание:

1. Установка
2. Первые Шаги
3. Навигация
4. Поиск Элементов
5. Ожидания
6. Объекты Страницы
7. WebDriver API
8. Приложение: Часто Задаваемые Вопросы

1. Установка

1.1. Введение

Привязка Selenium к Python предоставляет собой простой API [Интерфейс программирования приложений (англ. Application Programming Interface) — Прим. пер.] для написания тестов функциональности/тестов соответствия требованиям с использованием веб-драйвера Selenium WebDriver. С помощью Selenium Python API вы можете интуитивно просто получить доступ ко всему функционалу Selenium WebDriver.

Привязка Python-Selenium предоставляет удобный API для доступа к таким веб-драйверам Selenium как Firefox, Ie, Chrome, Remote и других. На данный момент поддерживаются версии Python 2.7, 3.2, 3.3 и 3.4.

В данной документации рассмотрен Selenium 2 WebDriver API. Selenium 1 / Selenium RC API в ней не охвачены.

1.2. Загрузка Selenium для Python

Вы можете загрузить привязку Selenium к Python со страницы пакета selenium на PyPI. Однако, лучшим способом будет использование модуля pip. Python 3.4 содержит pip в стандартной библиотеке. Используя pip, вы можете установить selenium следующей командой:

pip install selenium

Для создания изолированной среды Python вы можете использовать virtualenv. Также библиотека Python 3.4 содержит модуль pyvenv, который практически аналогичен virtualenv.

1.3. Подробная инструкция для пользователей Windows

Примечание
Для данной инсталляции вам необходим доступ к сети Интернет.

1. Установите Python 3.4 через файл MSI, доступный на странице загрузок сайта python.org.
2. Запустите командную строку через программу cmd.exe и запустите команду pip установки selenium, как показано ниже.

C:\Python34\Scripts\pip.exe install selenium

Теперь вы можете запускать свои тестовые скрипты, используя Python. К примеру, если вы создали скрипт на основе Selenium и сохранили его в C:\my_selenium_script.py, то вы можете запустить его следующей командой:

C:\Python34\python.exe C:\my_selenium_script.py

1.4. Загрузка Selenium server

Примечание
Selenium server необходим в случаях, когда вы хотите использовать remote WebDriver [удаленный — Прим. пер.]. За дополнительной информацией обращайтесь к разделу Использование Selenium с remote WebDriver. Если вы только начинаете изучать Selenium, вы можете пропустить этот раздел и продолжить изучение со следующей главы.

Selenium server написан на языке Java. Для его запуска рекомендована среда Java Runtime Environment (JRE) версии 1.6 или выше.

Вы можете скачать Selenium server 2.x на странице загрузок сайта selenium. Имя файла должно выглядеть примерно таким образом: selenium-server-standalone-2.x.x.jar. Вы всегда можете загрузить последнюю версию Selenium server 2.x.

Если Java Runtime Environment (JRE) не установлена в вашей системе, вы можете скачать JRE с сайта Oracle. Если вы используете системы GNU/Linux и имеете права root [права администратора — Прим. пер.], вы так же можете установить JRE, используя инструкции вашей системы.

Если команда java доступна в PATH (переменная окружения), вы можете запустить Selenium server используя следующую команду:

java -jar selenium-server-standalone-2.x.x.jar

Замените 2.x.x актуальной версией Selenium server, скачанной вами с сайта.

Если JRE установлена под пользователем, не обладающим правами root и/или если она недоступна в переменной окружения PATH, вы можете ввести относительный или полный путь до файла java. Аналогично, вы можете дополнить имя jar-файла Selenium server до относительного или полного пути. После этого команда будет выглядеть так:

/путь/до/java -jar /путь/до/selenium-server-standalone-2.x.x.jar

Перейти к следующей главе

На чтение 34 мин. Просмотров 390 Опубликовано

Приступая к автоматизированному тестированию, тестировщик задается двумя вопросами.

  • Какой фреймворк следует использовать для автоматизации тестирования?

  • Какому языку программирования отдать предпочтение?

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

Звезды GitHub 23.8k
Forks 7k
Загрузки 240k

Когда дело доходит до выбора правильного языка программирования для написания тестов, необходимо учитывать множество факторов. К ним относятся язык, на котором разрабатывается тестируемое приложение (AUT), поддержка сообщества, доступные фреймворки для автоматизации тестирования, поддержка IDE, удобство использования, простота и кривая обучения для тестировщика, пишущего тестовый сценарий.

Тестовые сценарии в Selenium могут быть реализованы на таких популярных языках программирования, как C#, Java, JavaScript, Python, PHP и Ruby. В этом руководстве по Selenium Java мы рассмотрим самую популярную комбинацию в автоматизации тестирования – Selenium с Java. К концу этого подробного руководства вы сможете начать свой путь в автоматизации тестирования Selenium с помощью Java. Я рассмотрел ряд тем, таких как установка и настройка проекта для написания вашего первого тестового случая. Я также расскажу о некоторых лучших практиках Selenium для автоматизации тестирования с помощью Selenium на Java.

Нам еще многое предстоит узнать 🙂 Итак, давайте начнем!

Содержание

  1. Начало работы: Автоматическое тестирование Selenium с Java
  2. Что такое Selenium?
  3. Как работает Selenium WebDriver?
  4. Почему стоит выбрать Selenium с Java?
  5. Установка и настройка: Как использовать Selenium с Java?
  6. Установка
  7. Установка JDK
  8. Установка Eclipse IDE
  9. Установите Selenium WebDriver и языковые привязки
  10. Установите драйверы браузера (необязательно)
  11. Как создать Java-проект Selenium в Eclipse?
  12. [Демонстрация] Написание первого тестового случая с помощью Selenium и Java
  13. Пример 1: Запуск нашего тестового примера на локальной машине
  14. Пример 2: Запуск нашего тестового случая на онлайн Selenium Grid
  15. Использование фреймворка TestNG для параллельного выполнения тестов
  16. Введение во фреймворк TestNG
  17. Параллельное выполнение тестов в TestNG с использованием XML-файла TestNG
  18. Установка и настройка
  19. Создание проекта TestNG
  20. Как запускать тестовые случаи параллельно с Selenium в TestNG на Cloud Grid?
  21. Лучшие практики для автоматизированного тестирования Selenium
  22. Заключение

Начало работы: Автоматическое тестирование Selenium с Java

Если вы новичок в автоматизации или перешли от ручного к автоматизированному тестированию, то Selenium WebDriver – лучшее место для начала. В нем есть все, что нужно для начала вашего пути автоматизации Selenium.

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

Что такое Selenium?

Selenium – это широко распространенная система автоматизации тестирования, используемая для автоматизации браузера веб-приложений. Согласно недавнему исследованию автоматизации тестирования, 81% респондентов использовали Selenium в качестве инструмента автоматизации тестирования.

Несколько особенностей Selenium, которые способствовали его популярности, следующие

  • Открытый исходный код с большим сообществом.

  • Поддерживает автоматизацию на различных платформах, таких как Windows, Macintosh, Linux и т.д.,

  • Поддерживает множество браузеров, включая Chrome, Firefox, IE, Safari и т.д.

  • Поддерживает множество языков программирования, таких как Java, Python, Ruby, C# и т.д.

  • Поддерживает множество фреймворков, таких как JUnit, TestNG и т.д.

  • Легко интегрируется с инструментами CI, такими как Jenkins, Docker и т.д.

  • Простая генерация отчетов

Selenium доступен в четырех различных вариантах, наиболее популярным является Selenium WebDriver. Selenium WebDriver – это объектно-ориентированный API, используемый для автоматизации взаимодействия с веб-браузерами (например, Chrome, Firefox, Edge и т.д.) с помощью соответствующих драйверов браузера.

У нас также есть Selenium Grid, который помогает запускать тесты параллельно в различных комбинациях браузеров и платформ. Selenium Grid следует концепции концентратор-узел, где мы можем запускать скрипты WebDriver на одной машине (концентраторе), но выполнение будет осуществляться несколькими удаленными машинами (узлами) с помощью команд маршрутизации.

LambdaTest предоставляет вам облачную онлайн Selenium Grid, которая поможет вам запустить ваши тестовые случаи на онлайн ферме браузеров из 3000+ браузеров и версий браузеров, обеспечивая более быстрое выполнение и максимальное покрытие тестов с помощью минимальных конфигураций.

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

Знаете ли вы, что логические свойства и значения CSS позволяют управлять версткой с помощью логических, а не физических сопоставлений направлений и размеров. Они являются эквивалентом соответствующих физических эквивалентов в режиме записи.

Как работает Selenium WebDriver?

Selenium WebDriver работает по модели архитектуры клиент-сервер.

На стороне клиента имеется клиентская библиотека Selenium, которая поддерживает несколько клиентских библиотек, соответствующих используемому языку программирования, например, Java, Ruby, Python и т.д. Функция связывания языков в Selenium позволяет ему поддерживать различные языки программирования. Исходя из языка программирования тестовых сценариев, нам необходимо выбрать клиентскую библиотеку. Например, для использования Selenium с Java необходимо использовать привязку к языку Java. Вы можете загрузить соответствующие языковые привязки отсюда.

На стороне сервера находится драйвер браузера, который принимает HTTP-запросы, поступающие со стороны клиента по протоколу связи. Затем драйвер браузера взаимодействует с реальным браузером и заставляет его выполнять действия, определенные в сценариях автоматизации. Для каждого браузера существует свой драйвер браузера. Например, для автоматизации браузера Chrome необходимо использовать драйвер Chrome. Ниже указаны места, откуда можно загрузить соответствующий драйвер браузера.

БРАУЗЕР МЕСТО ЗАГРУЗКИ
Opera https://github.com/operasoftware/operachromiumdriver/releases
Firefox https://github.com/mozilla/geckodriver/releases
Chrome http://chromedriver.chromium.org/downloads
Internet Explorer https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver
Microsoft Edge https://blogs.windows.com/msedgedev/2015/07/23/bringing-automated-testing-to-microsoft-edge-through-webdriver/

Сторона клиента и сторона сервера взаимодействуют друг с другом посредством протокола связи.

В версиях, предшествующих Selenium 4, для связи между клиентом и сервером использовался протокол JSON wire. Он состоит из REST API, который отправляет запросы от клиента к серверу (родной API браузера) через HTTP. Но здесь, поскольку клиентские библиотеки Selenium (клиент) используют протокол JSON, а веб-браузер (сервер) – протокол W3C, для связи между тестовыми скриптами и браузерами требовалось кодирование и декодирование запросов API.

Начиная с Selenium 4, проводной протокол JSON заменяется протоколом W3C WebDriver, позволяющим осуществлять прямую связь между библиотеками Selenium Client и целевым браузером. Поскольку WebDriver и веб-браузер используют один и тот же протокол, кодирование и декодирование запросов API больше не требуется, что делает тестовые примеры более стабильными, чем когда-либо.

Почему стоит выбрать Selenium с Java?

Согласно опросу разработчиков Stack Overflow, Java является одним из самых популярных языков программирования, его предпочитают более 35% респондентов.

Выбор написания тестов автоматизации Selenium с использованием Java имеет множество преимуществ. Некоторые из них перечислены ниже.

  • Поскольку Selenium поддерживает Java, доступна подробная документация, что облегчает написание тестовых примеров.

  • По сравнению с другими языками, такими как Python, программы, написанные на Java, работают быстрее.

  • Доступность для различных операционных систем, таких как UNIX, Linux, Windows, Mac OS и т.д.

  • Java поставляется с множеством готовых фреймворков автоматизации, таких как TestNG, JUnit и т.д., которые можно использовать вместе с Selenium для улучшения кодирования, отчетности и обслуживания.

Установка и настройка: Как использовать Selenium с Java?

Чтобы начать свой путь автоматизации тестирования Selenium, первым шагом будет установка и настройка Selenium в вашей системе. В этом разделе статьи о Selenium с Java я проведу вас через процесс установки шаг за шагом. Вы также узнаете, как создать базовую настройку проекта Selenium с Java.

Установка

Процесс установки состоит из следующих шагов.

  1. Установите JDK.

  2. Установите Eclipse IDE.

  3. Установите Selenium WebDriver и языковые привязки.

  4. Установите драйверы браузеров (необязательно).

Установка JDK

Начнем с установки Java Development Kit (JDK). JDK включает в себя JRE (Java Runtime Environment), используемую для написания и выполнения Java-кода. Вы можете загрузить JDK с любого из предложенных ниже сайтов.

  • Oracle JDK

  • OpenJDK

После завершения установки установите переменные среды. Для этого выполните следующие действия:

  1. Щелкните правой кнопкой мыши на Компьютер.

  2. Нажмите на “Свойства”.

  3. Нажмите на ‘Дополнительные параметры системы’.

  4. В Свойствах системы выберите вкладку ‘Дополнительно’.

  5. Нажмите на ‘Переменные среды’.

  6. Скопируйте путь, по которому установлен JDK. (Например: C:Program FilesJavajdk1.6.0bin).

  7. В открывшемся окне “Переменные среды” выберите ‘New’ в разделе ‘System variables’.

  8. Задайте путь. Если ‘Path’ уже существует, то отредактируйте его.

9- Нам также необходимо установить CLASSPATH. Создайте новую переменную окружения и скопируйте в качестве значения тот же путь к JDK. Если ‘CLASSPATH’ уже существует, отредактируйте ее.

Настройка переменной окружения завершена.

Откройте командную строку и выполните следующую команду, чтобы убедиться, что Java успешно установлена в вашей системе.

java -version

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

Установка Eclipse IDE

Далее нам необходимо установить IDE (интегрированную среду разработки). IDE – это платформа, на которой разработчики могут писать код и запускать его. Я буду использовать Eclipse IDE for Java Developers для этой демонстрации. Вы можете скачать последнюю версию отсюда.

После загрузки установочного файла завершите процесс установки. В качестве альтернативы вы также можете использовать любую другую популярную IDE, например Jetbrains Webstorm, IntelliJ IDEA и т.д.

Установите Selenium WebDriver и языковые привязки

Загрузите библиотеку Selenium Client Library для Java отсюда. Загрузка идет в виде ZIP-файла. Распакуйте содержимое (JAR-файлы) и сохраните их в директории.

Мы загружаем клиентские драйверы для Selenium 4. Для работы с Selenium 3 или более старыми версиями посмотрите раздел “Предыдущие релизы”.

Установите драйверы браузера (необязательно)

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

Однако если вы используете облачную Selenium Grid, например LambdaTest, этот шаг можно пропустить.

После завершения процесса установки перейдем к настройке проекта.

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

Как создать Java-проект Selenium в Eclipse?

Нам необходимо создать проект для написания и хранения наших тестовых примеров. Чтобы создать новый проект Selenium с Java в Eclipse, выполните следующие шаги.

Шаг 1: Запустите Eclipse
Шаг 2: Создайте рабочее пространство.

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

Шаг 3: Создайте новый проект Java.

Перейдите в меню Файл > Новый > Java-проект. Назовите проект.

Появится новое всплывающее окно. Введите следующие данные:

  • Имя проекта

  • Место сохранения проекта

  • Исполняемая JRE

После этого нажмите ‘Finish’.

Теперь проект создан.

Шаг 4: Добавьте файлы Selenium API JAR в Java-проект, выполнив следующие действия:

  1. Щелкните правой кнопкой мыши на проекте и выберите Properties.

  2. Выберите Java Build Path.

  3. В разделе библиотек нажмите на Add External JARs, который активируется после выбора Classpath.

4- Добавьте Selenium Java Client JARS. Перейдите в папку, в которую вы загрузили и извлекли JAR-файлы.

5- Как только все JAR-файлы будут добавлены, нажмите “Применить и закрыть”.

Когда наш проект настроен с Selenium и Java, мы готовы написать и запустить наш первый тестовый сценарий в Selenium.

Если вы разработчик или тестировщик и хотите поднять свои навыки работы с Selenium и Java на новый уровень, эта сертификация Selenium Java 101 от LambdaTest поможет вам достичь этой цели.

Вот краткий обзор сертификации Selenium Java 101 от LambdaTest:

Проверьте это: Маски CSS: вы можете замаскировать часть элемента с помощью другого элемента (или изображения)

[Демонстрация] Написание первого тестового случая с помощью Selenium и Java

Пришло время перейти к практическим занятиям! В этом разделе статьи о Selenium с Java вы научитесь писать свой первый тестовый пример с использованием Selenium с Java.

Сценарий тестирования

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

  1. Запустите веб-сайт.

  2. Введите значение ‘a’.

  3. Введите значение для ‘b’.

  4. Нажмите на кнопку “Получить итог”, чтобы вывести сумму двух чисел “a” и “b”.

  5. Проверьте результат.

Пример 1: Запуск нашего тестового примера на локальной машине

В этом разделе статьи о Selenium с Java мы узнаем, как написать автоматизированный тестовый пример и запустить его на локальной машине. Шаги подробно описаны ниже.

Шаг 1: Создайте файл класса внутри вашего Java-проекта.
Щелкните правой кнопкой мыши на папке src внутри вашего проекта. Выберите New > Class.

Я назову его TestOne.java. Тест будет создан внутри пакета по умолчанию.

Шаг 2: Напишите код нашего тестового примера, используя Selenium с Java.

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

import org.openqa.selenium.By;      
import org.openqa.selenium.WebDriver;              
import org.openqa.selenium.chrome.ChromeDriver;

Вход в полноэкранный режим Выход из полноэкранного режима

Внутри метода main() зададим свойства для определения пути к драйверу браузера, который мы загрузили во время установки.

System.setProperty(“webdriver.chrome.driver”, “C:/location_of_chromedriver.exe”);

Вход в полноэкранный режим Выйти из полноэкранного режима

После этого определим новый экземпляр Webdriver.

WebDriver driver= new ChromeDriver();

Войти в полноэкранный режим Выход из полноэкранного режима

Обзор всех возможных методов, которые WebDriver API предоставляет нам для автоматизации браузера, показан на снимке ниже.

Теперь давайте напишем код для нашего тестового сценария.

//Maximize window      
        driver.manage().window().maximize();    

        //Launch the Site.      
        driver.get("[https://www.lambdatest.com/selenium-playground/simple-form-demo](https://www.lambdatest.com/selenium-playground/simple-form-demo)");

        //Enter values into form and submit      
        driver.findElement(By.id("sum1")).sendKeys("2");                    
        driver.findElement(By.id("sum2")).sendKeys("5");    
        driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

        //Verify the result
        String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

        if( Integer.parseInt(result) == 7) {
             System.out.println("Test Success");
        } else {
             System.out.println("Test Failed");
        }

        //Close the browser
        driver.quit();

Вход в полноэкранный режим Выход из полноэкранного режима

Я хотел бы кратко объяснить команды WebDriver, которые я использовал в тестовом сценарии.

  • get(String arg): void

Метод get() принимает в качестве параметра строковый URL и открывает указанный URL в текущем окне браузера. Этот метод ничего не возвращает.

  • findElement(By by): WebElement

Метод findElement() в Selenium – это команда WebElement, используемая для поиска Web-элемента в DOM для выполнения какого-либо действия, например, щелчка мышью, ввода текста и т. д. Он принимает входной параметр типа By для поиска элемента с использованием различных стратегий локатора, таких как id, classname, XPath и т.д.

Функция findElement() возвращает WebElement, если элемент найден, в противном случае выбрасывается исключение времени выполнения – NoSuchElementException. Чтобы узнать больше об обработке исключений, вы можете просмотреть этот блог о распространенных исключениях Selenium.

  • quit(): void

Метод quit() используется для закрытия всех окон браузера, открытых Webdriver. Он не принимает никаких параметров и ничего не возвращает.

В тестовом сценарии используются методы WebElement:

МЕТОД WEBELEMENT ИСПОЛЬЗОВАНИЕ МЕТОДА
click(): void Чтобы щелкнуть элемент
sendKeys(): void Имитация ввода текста в элемент, который может установить его значение. В качестве ввода принимается последовательность символов.
getText(): String Получение видимого (т.е. не скрытого CSS) текста элемента, включая вложенные элементы.

Чтобы узнать больше о методах WebElement, пожалуйста, найдите официальную документацию здесь.

Для поиска элементов я использовал инструменты разработчика браузера.

Наш финальный код выглядит следующим образом!

import org.openqa.selenium.By;      
import org.openqa.selenium.WebDriver;              
import org.openqa.selenium.chrome.ChromeDriver;

public class TestOne {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", "E:/Selenium/chromedriver.exe");

        WebDriver driver= new ChromeDriver();          

        //Maximize window      
        driver.manage().window().maximize();    

        //Launch the Site.      
        driver.get("https://www.lambdatest.com/selenium-playground/simple-form-demo");

        //Enter values into form and submit      
        driver.findElement(By.id("sum1")).sendKeys("2");                    
        driver.findElement(By.id("sum2")).sendKeys("5");    
        driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

        //Verify the result
        String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

        if( Integer.parseInt(result) == 7) {
             System.out.println("Test Success");
        } else {
             System.out.println("Test Failed");
        }
               //Close the browser
        driver.quit();              
    }
}

Вход в полноэкранный режим Выход из полноэкранного режима

Источник: *GitHub*.

Шаг 3: Запустите тест.

Наконец, пришло время запустить наш тест. Щелкните правой кнопкой мыши на файле тестового класса и выберите.

Run As > Java Application

Запустится браузер, и тест будет успешно выполнен на вашей локальной машине!

Вы также можете проверить журналы в консоли.

Пример 2: Запуск нашего тестового случая на онлайн Selenium Grid

В предыдущем разделе этой статьи о Selenium с Java мы рассмотрели, как запустить наш тестовый пример на локальной машине. Здесь мы рассмотрим, как запустить наш тестовый пример в удаленной облачной Selenium Grid.

Запуск тестовых примеров в онлайн Selenium Grid поможет нам решить перечисленные ниже проблемы, которые возникают при локальном выполнении, когда размер проекта и требования к тестовому покрытию увеличиваются.

  • Масштабируемость

  • Лучшее покрытие браузеров

  • Ограничения инфраструктуры для кросс-браузерного тестирования и т.д.

LambdaTest – это платформа для кросс-браузерного тестирования, которая предоставляет онлайн ферму браузеров из 3000+ комбинаций браузеров и ОС и онлайн Selenium Grid, которую вы можете интегрировать в ваш текущий проект тестирования путем минимальных изменений кода. Следуйте за нами, чтобы узнать, как это сделать!

Вот взгляд на облачную Selenium Grid от LambdaTest:

Вы также можете подписаться на YouTube-канал LambdaTest и быть в курсе последних уроков по Selenium-тестированию, Cypress E2E тестированию, CI/CD и многому другому.

Шаг 1: Создайте бесплатный аккаунт на LambdaTest и получите уникальное имя пользователя и ключ доступа.

Шаг 2: Внутри класса теста определите все необходимые переменные для соединения с удаленной сеткой. Кроме того, вы можете определить свое уникальное имя пользователя и ключ доступа.

static String username = "YOUR_USERNAME";
   static String accesskey = "YOUR_ACCESS_KEY";
   static RemoteWebDriver driver = null;
   static String gridURL = "[@hub](http://twitter.com/hub).lambdatest.com/wd/hub";
   static boolean status = false;

Вход в полноэкранный режим Выйти из полноэкранного режима

Шаг 3: Передайте возможности браузера. Вы можете сгенерировать свои собственные желаемые возможности с помощью LambdaTest Capabilities Generator.

DesiredCapabilities capabilities = new DesiredCapabilities();  
     capabilities.setCapability("browserName", "Chrome");
     capabilities.setCapability("browserVersion", "101.0");
     HashMap<String, Object> ltOptions = new HashMap<String, Object>();
     ltOptions.put("user",username);
     ltOptions.put("accessKey",accesskey);
     ltOptions.put("build", "Selenium Java Test");
     ltOptions.put("name", "TestOne");
     ltOptions.put("platformName", "Windows 11");
     ltOptions.put("selenium_version","4.1.2");
     ltOptions.put("driver_version","101.0");
     capabilities.setCapability("LT:Options", ltOptions);

Войти в полноэкранный режим Выйти из полноэкранного режима

Шаг 4: Определите новый экземпляр RemoteWebDriver().

Remote WebDriver – это интерфейс, который используется для выполнения автоматизации браузера на удаленном вычислительном устройстве или в распределенной среде. Он может управлять браузером в сетке путем настройки узла и концентратора.

Обратите внимание, что вам больше не нужно передавать драйвер браузера.

try {
            driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
        }
        catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }

Вход в полноэкранный режим Выход из полноэкранного режима

Шаг 5: Наш окончательный код теперь выглядит так!

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class TestOneWithRemoteGrid {

    static String username = "YOUR_USERNAME";
    static String accesskey = "YOUR_ACCESS_KEY";
    static RemoteWebDriver driver = null;
    static String gridURL = "[@hub](http://twitter.com/hub).lambdatest.com/wd/hub";
    static boolean status = false;

    public static void main(String[] args) {

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("browserName", "Chrome");
        capabilities.setCapability("browserVersion", "101.0");
        HashMap<String, Object> ltOptions = new HashMap<String, Object>();
        ltOptions.put("user",username);
        ltOptions.put("accessKey",accesskey);
        ltOptions.put("build", "Selenium Java Test");
        ltOptions.put("name", "TestOne");
        ltOptions.put("platformName", "Windows 11");
        ltOptions.put("selenium_version","4.1.2");
        ltOptions.put("driver_version","101.0");
        capabilities.setCapability("LT:Options", ltOptions);

        try {
            driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
        } catch (MalformedURLException e) {
            System.out.println("Invalid grid URL");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }  


        //Maximize window      
        driver.manage().window().maximize();    

        //Launch the Site.      
        driver.get("[https://www.lambdatest.com/selenium-playground/simple-form-demo](https://www.lambdatest.com/selenium-playground/simple-form-demo)");

        //Enter values into form and submit        
        driver.findElement(By.id("sum1")).sendKeys("2");                    
        driver.findElement(By.id("sum2")).sendKeys("5");    
        driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

        //Verify the result
        String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

        if( Integer.parseInt(result) == 7) {
             System.out.println("Test Success");
        } else {
             System.out.println("Test Failed - " + result);
        }                

        //Close browser
        driver.quit();                    
    }
}

Вход в полноэкранный режим Выйти из полноэкранного режима

Источник: *GitHub*.

Шаг 6: Запустите тест.

Тест начинает выполняться. Перейдите на панель LambdaTest Dashboard, чтобы посмотреть состояние выполнения.

Наш тест выполнен успешно. Вы можете проанализировать подробный отчет, содержащий видео и журналы.

Кроме того, вы можете перейти на панель аналитики LambdaTest Analytics Dashboard, чтобы увидеть показатели производительности теста. Вы можете увидеть общее количество пройденных или проваленных тестов в разделе “Сводка тестов”. Вы также можете увидеть снимок последовательных тестов в разделе “Обзор тестов”.

Знаете ли вы, что математические функции CSS min(), max() и clamp() – это полифилл, который предоставляет более продвинутые математические выражения в дополнение к ‘calc()’.

Использование фреймворка TestNG для параллельного выполнения тестов

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

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

В предыдущем разделе вы узнали, как написать и запустить тест последовательно, используя Selenium с Java. Теперь я расскажу вам, как выполнять тесты параллельно на облачной Selenium Grid с помощью фреймворка TestNG.

Введение во фреймворк TestNG

TestNG – это известная платформа автоматизации тестирования с открытым исходным кодом для Java, где NG означает “следующее поколение”. TestNG широко используется пользователями Selenium благодаря своим возможностям и практичности. Запуск тестов Selenium в одиночку имеет множество ограничений. Однако TestNG предоставляет целый набор новых возможностей, делая его мощным и полезным.

Ниже перечислены несколько важнейших особенностей TestNG:

  • Легкая генерация отчетов в желаемых форматах. Теперь стало проще анализировать, сколько тестовых примеров прошло и сколько не прошло во время каждого запуска теста.

  • Поддержка параллельного тестирования. Несколько тестовых примеров могут выполняться одновременно, что сокращает общее время выполнения теста.

  • Возможность группировать тестовые случаи в TestNG без особых усилий.

  • Поддерживаются аннотации TestNG, такие как @test, @BeforeTest, @AfterTest и т.д.

  • Легкая интеграция с такими инструментами, как Maven, Jenkins и т.д.

Параллельное выполнение тестов в TestNG с использованием XML-файла TestNG

Как уже отмечалось, одним из ключевых преимуществ использования фреймворка автоматизации TestNG является то, что он поддерживает параллельное выполнение тестов. Система автоматизации тестирования TestNG позволяет выполнять тесты в параллельном или многопоточном режиме, используя концепцию многопоточности Java.

Многопоточность – это процесс одновременного выполнения нескольких потоков без какой-либо зависимости друг от друга. Это означает, что потоки выполняются изолированно, и поэтому исключения, возникающие в одном потоке, не влияют на другие. Многопоточность помогает эффективно использовать процессор, значительно сокращая время простоя. В TestNG мы включаем параллельное тестирование путем внесения необходимых изменений в файл конфигурации – файл TestNG XML.

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

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

  • classes – для запуска в параллельном режиме всех тестовых примеров, присутствующих внутри классов в XML.

  • methods – для запуска всех методов с аннотацией @test в параллельном режиме.

  • tests – для запуска всех тестовых случаев, присутствующих внутри тегов в XML в параллельном режиме.

  • экземпляры – для запуска всех тестовых случаев в одном экземпляре в параллельном режиме.

Мы также можем задать количество потоков, которые мы хотим выделить во время выполнения, используя атрибут thread-count. По умолчанию значение количества потоков в TestNG равно 5.

<suite name=”Regression Test Suite” parallel=”methods” thread-count=”2">

Вход в полноэкранный режим Выход из полноэкранного режима

Двигаясь дальше, давайте установим и настроим TestNG в нашем Eclipse. Также мы узнаем, как переписать наш демонстрационный тест в виде теста TestNG и запустить его параллельно в трех разных браузерах, используя онлайн Selenium Grid.

Установка и настройка

Установка TestNG в Eclipse – это простой процесс. Перейдите в Eclipse Marketplace и установите TestNG.

Справка > Eclipse Marketplace.

После установки вы сможете найти его в разделе Installed.

Завершив установку, перейдем к базовой настройке проекта.

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

Чтобы создать новый проект Java TestNG в Eclipse, выполните следующие шаги.

Шаг 1: Запустите Eclipse и создайте новый Java-проект.

Перейдите в меню Файл > Новый > Java-проект.

Шаг 2: Назовите свой проект и нажмите кнопку Next.

Шаг 3: Добавьте библиотеки.

Щелкните правой кнопкой мыши на папке проекта и выберите Properties.

  1. Выберите Java Build Path.

  2. Перейдите к Libraries, выберите Classpath и нажмите Add Library.

Шаг 4: Выберите TestNG и нажмите Далее.

Вы увидите, что TestNG был добавлен в библиотеку проекта.

Шаг 5: Добавьте JAR-файлы Selenium API в проект TestNG и нажмите Применить и Закрыть.

Мы успешно создали проект TestNG и готовы написать и запустить наш первый тестовый пример TestNG.

Как запускать тестовые случаи параллельно с Selenium в TestNG на Cloud Grid?

В этом разделе статьи о Selenium с Java мы узнаем, как добиться параллельного выполнения тестов в TestNG. Для демонстрации мы перепишем наш предыдущий тестовый пример в тест TestNG и выполним его параллельно на пяти различных браузерах (Chrome, Safari, Firefox, Opera и Edge), используя Online Selenium Grid, предоставляемый LambdaTest.

Шаги подробно описаны ниже.

Шаг 1: Перейдите в проект TestNG, который мы создали в предыдущем шаге.
Шаг 2: Создайте файл класса TestNG, выполнив описанные ниже действия:

  1. Щелкните правой кнопкой мыши на проекте src и найдите TestNG в нижней части списка.

  2. Выберите Создать класс TestNG.

3- Назовите класс, выберите необходимые аннотации, укажите имя XML-файла и нажмите Finish. Здесь я назвал класс ParallelTest.

Создается файл класса TestNG, содержащий скелетную структуру кода.

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

  • @test – Подразумевает, что метод является тестовым случаем. Поэтому все тесты должны быть помечены этой аннотацией.

  • @BeforeMethod и @AfterMethod – эти аннотации запускаются один раз до и после каждого метода @test в классе.

Шаг 3: Напишите наш тестовый пример, используя TestNG и Selenium.
Я переписал наш предыдущий тестовый сценарий в виде тестового случая TestNG. Некоторые заметные изменения следующие:

  • Внутри метода, отмеченного аннотацией @BeforeMethod, я разместил все шаги настройки, поскольку они должны быть выполнены первыми перед тестом. Кроме того, имя метода было переименовано в setUp(). Кроме того, для обработки исключений был реализован блок try-catch.

  • Также я добавил аннотацию @Parameters поверх метода для получения значений браузера, версии и платформы из нашего XML-файла TestNG.

 [@BeforeMethod](http://twitter.com/BeforeMethod)
    [@Parameters](http://twitter.com/Parameters)(value={"browser","version","platform"})
    public void setUp(String browser, String version, String platform) throws Exception {
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability("browserName", browser);
            capabilities.setCapability("browserVersion",version);
            HashMap<String, Object> ltOptions = new HashMap<String, Object>();
            ltOptions.put("user",username);
            ltOptions.put("accessKey",accesskey);
            ltOptions.put("build", "TestNG Parallel Test");
            ltOptions.put("name", "TestOne");
            ltOptions.put("platformName", platform);

            ltOptions.put("selenium_version","4.1.2");
            ltOptions.put("driver_version","101.0");
            capabilities.setCapability("LT:Options", ltOptions);

         try {
             driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
         } catch (MalformedURLException e) {
             System.out.println("Invalid grid URL");
         } catch (Exception e) {
             System.out.println(e.getMessage());
         }
     }

Вход в полноэкранный режим Выход из полноэкранного режима

  • Внутри метода, отмеченного аннотацией @AfterMethod, я разместил шаги по завершению теста, поскольку они должны выполняться последними после каждого теста. Также имя метода было переименовано в tearDown().
[@AfterMethod](http://twitter.com/AfterMethod)
        public void tearDown() throws Exception {
           if (driver != null) {
                driver.quit();
            }
        }
    }

Вход в полноэкранный режим Выход из полноэкранного режима

  • Мы будем писать наш фактический код для шагов тестирования внутри метода, помеченного аннотацией @test. Поскольку мы автоматизируем дополнительный сценарий, я переименовал метод в addValues().
[@Test](http://twitter.com/Test)
    public void addValues() {
            //Maximize window      
            driver.manage().window().maximize();    

            //Launch the Site.        driver.get("[https://www.lambdatest.com/selenium-playground/simple-form-demo](https://www.lambdatest.com/selenium-playground/simple-form-demo)");

            //Enter values into form and submit        
            driver.findElement(By.id("sum1")).sendKeys("2");                    
            driver.findElement(By.id("sum2")).sendKeys("5");    
            driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

            //Verify the result
            String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

            if( Integer.parseInt(result) == 7) {
                 System.out.println("Test Success");
            } else {
                 System.out.println("Test Failed - " + result);
            }

Вход в полноэкранный режим Выход из полноэкранного режима

Окончательный код выглядит следующим образом.

g;

    import java.net.MalformedURLException;
    import java.net.URL;

    import org.openqa.selenium.By;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.openqa.selenium.remote.RemoteWebDriver;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;

    public class ParallelTest {

    public String username = "YOUR_USERNAME";
    public String accesskey = "YOUR_ACCESSKEY";
    public RemoteWebDriver driver = null;
    public String gridURL = "[@hub](http://twitter.com/hub).lambdatest.com/wd/hub";
    boolean status = false;

    [@BeforeMethod](http://twitter.com/BeforeMethod)
    [@Parameters](http://twitter.com/Parameters)(value={"browser","version","platform"})
    public void setUp(String browser, String version, String platform) throws Exception {
            DesiredCapabilities capabilities = new DesiredCapabilities();
                    capabilities.setCapability("browserName", browser);
            capabilities.setCapability("browserVersion",version);
            HashMap<String, Object> ltOptions = new HashMap<String, Object>();
            ltOptions.put("user",username);
            ltOptions.put("accessKey",accesskey);
            ltOptions.put("build", "TestNG Parallel Test");
            ltOptions.put("name", "TestOne");
            ltOptions.put("platformName", platform);
            ltOptions.put("selenium_version","4.1.2");
            ltOptions.put("driver_version","101.0");
            capabilities.setCapability("LT:Options", ltOptions);

         try {
             driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
         } catch (MalformedURLException e) {
             System.out.println("Invalid grid URL");
         } catch (Exception e) {
             System.out.println(e.getMessage());
         }
     }
    [@Test](http://twitter.com/Test)
    public void addValues() {
            //Maximize window      
            driver.manage().window().maximize();    

            //Launch the Site.        driver.get("[https://www.lambdatest.com/selenium-playground/simple-form-demo](https://www.lambdatest.com/selenium-playground/simple-form-demo)");

            //Enter values into form and submit        
            driver.findElement(By.id("sum1")).sendKeys("2");                    
            driver.findElement(By.id("sum2")).sendKeys("5");    
            driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='gettotal']/button")).click();  

            //Verify the result
            String result = driver.findElement(By.xpath("//*[[@id](http://twitter.com/id)='addmessage']")).getText();

            if( Integer.parseInt(result) == 7) {
                 System.out.println("Test Success");
            } else {
                 System.out.println("Test Failed - " + result);
            }   

    [@AfterMethod](http://twitter.com/AfterMethod)
        public void tearDown() throws Exception {
           if (driver != null) {
                driver.quit();

Вход в полноэкранный режим Выход из полноэкранного режима

GitHub

**Шаг 4: **Настройте XML-файл TestNG для работы в параллельном режиме. Шаги приведены ниже:

  1. Откройте файл testng.xml. Если он еще не создан, вы можете создать его, добавив новый файл в проект и назвав его testng.xml.

  2. Отредактируйте шаблон. Вы можете назвать тестовый набор и имя теста по своему усмотрению. Но имя класса должно быть точно таким же, как у нашего класса TestNG.

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "[https://testng.org/testng-1.0.dtd](https://testng.org/testng-1.0.dtd)">
    <suite name="Parallel Test Suite">
        <test name="Test">
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test> <!-- Test -->
    </suite> <!-- Suite -->

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

3- Чтобы запустить параллельное выполнение тестов в TestNG, задайте атрибут parallel в . Для параллельного выполнения тестовых методов установите значение атрибута как “tests”.

<suite name="Parallel Test Suite" parallel="tests" thread-count="5">

Вход в полноэкранный режим Выйти из полноэкранного режима

4- Добавьте параметры для настройки тестов на выполнение в определенном браузере, версии браузера и ОС. Например, ниже приведен код для настройки теста на запуск в браузере Chrome версии 101.0 в Windows 11. Аналогично, вы можете указать любое количество комбинаций.

<test name="Chrome Test">
            <parameter name="browser" value="Chrome" />
            <parameter name="version" value="101.0" />

            <parameter name="platform" value="WIN11" />

            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

Вход в полноэкранный режим Выйти из полноэкранного режима

Окончательный код для testng.xml выглядит следующим образом.

<?xml version="1.0" encoding="UTF-8"?>
    <suite name="Suite" parallel="tests" thread-count="5">

        <test name="Chrome Test">
            <parameter name="browser" value="Chrome" />
            <parameter name="version" value="101.0" />
            <parameter name="platform" value="WIN11" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

        <test name="Firefox Test">
            <parameter name="browser" value="Firefox" />
            <parameter name="version" value="100.0" />
            <parameter name="platform" value="WIN8" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

        <test name="Safari Test">
            <parameter name="browser" value="safari" />
            <parameter name="version" value="11.0" />
            <parameter name="platform" value="macos 10.13" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

        <test name="MS Edge Test">
            <parameter name="browser" value="Edge" />
            <parameter name="version" value="101.0" />
            <parameter name="platform" value="WIN10" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test>

        <test name="Opera Test">
            <parameter name="browser" value="Opera" />
            <parameter name="version" value="85.0" />
            <parameter name="platform" value="WIN10" />
            <classes>
                <class name="testng.ParallelTest" />
            </classes>
        </test> <!-- Test -->
    </suite> <!-- Suite -->

Вход в полноэкранный режим Выйти из полноэкранного режима

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

5- Наконец, пришло время запустить наш тестовый пример. Щелкните правой кнопкой мыши на нашем файле testng.xml и выберите Run As > TestNG Test Suite.

Наш тест начнет выполняться. Перейдите на панель автоматизации LambdaTest, чтобы увидеть статус выполнения.

Тест выполняется параллельно в 5 браузерах, отчеты и журналы генерируются успешно.

Лучшие практики для автоматизированного тестирования Selenium

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

В этом разделе статьи о Selenium с Java мы обсудим некоторые рекомендации и шаблоны проектирования, рекомендованные сообществом Selenium, чтобы помочь вам создать хорошо структурированные тестовые наборы. Помните, что не существует ситуации “один размер подходит для всех”, когда речь идет об автоматизации тестирования. Вдумчиво решите, что лучше всего подойдет для вашей конкретной среды.

  1. Планирование и разработка тестовых примеров заранее

Прежде чем приступить к написанию тестов автоматизации, рекомендуется, чтобы команды QA потратили время на создание надлежащего плана тестирования. Опросы показывают, что 80% проектов сразу приступают к автоматизации, не имея осязаемой стратегии.

Однако, чтобы обеспечить безошибочное тестирование приложения, QA должны придумать все возможные логические сценарии и создать максимум тестовых случаев, основанных на перспективах конечного пользователя.

2. Реализация объектной модели страницы

Когда происходит изменение пользовательского интерфейса, локаторы Selenium также могут измениться, и мы должны обновить измененные локаторы во всех тестовых сценариях, использующих их. Но по мере увеличения сложности приложения и более частых изменений пользовательского интерфейса создание и поддержка тестовых сценариев становится утомительным. Объектная модель страницы (POM) является популярным шаблоном проектирования в автоматизированном тестировании Selenium, который помогает улучшить обслуживание тестов и уменьшить дублирование кода.

3. Выбор наиболее подходящих локаторов

При написании сценариев автоматизированного тестирования значительная часть времени уходит на определение местоположения веб-элементов. Selenium предлагает нам множество стратегий для определения местоположения веб-элемента, таких как ID, Name, Link Text, XPath, CSS Selector, DOM Locator и т.д.

Однако некоторые веб-локаторы более хрупкие, чем другие. Поскольку реализация пользовательского интерфейса подвержена частым изменениям, мы должны быть осторожны в выборе правильных веб-локаторов, что позволит минимизировать влияние изменений кода пользовательского интерфейса на тесты автоматизации. Если есть возможность, выбирайте уникальные локаторы, такие как ID и Name, которые легко найти и они более надежны, так как менее подвержены изменениям.

4. Внедряйте протоколирование и отчетность

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

Отчет о тестировании – это документ, который содержит всю информацию о конкретном запуске теста, включая количество пройденных тестовых случаев, количество проваленных тестовых случаев, общее затраченное время, ошибки со снимком и т.д. Несмотря на то, что Selenium по умолчанию не поставляется с функцией создания отчетов, вы можете реализовать ее с помощью таких фреймворков автоматизации тестирования, как TestNG.

Логирование помогает нам лучше понять наш код и, следовательно, облегчает отладку. Изучение журналов – это самый быстрый способ проанализировать, почему в вашем коде возникла проблема. Некоторые из популярных уровней ведения журнала: отладка, информация, предупреждение, ошибка и критический. Хорошее ведение журнала экономит время. Однако, если переусердствовать, это может замедлить выполнение тестов.

5. Включение команд ожидания

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

В Java тестировщики часто добиваются такой задержки с помощью Thread.sleep(). Однако это не является рекомендуемой практикой. Как следует из названия, при вызове метода Thread.sleep() поток переходит в спящий режим на указанное время и не делает абсолютно ничего, чтобы приостановить сценарий автоматизации. По истечении этого времени он переходит к выполнению следующей строки кода.

В режиме реального времени мы не сможем предсказать точное время загрузки страницы, поскольку оно зависит от многих внешних факторов. Иногда страница может загрузиться быстро, снизив скорость выполнения теста из-за оставшейся ненужной задержки, вызванной sleep(). А иногда может потребоваться больше времени, чем указано, что приведет к неудаче теста, поскольку элемент не был полностью загружен. В качестве лучшей и более эффективной альтернативы используйте команды Implicit wait и Explicit wait, предоставляемые Selenium, вместо метода sleep.

Заключение

Selenium с Java является наиболее распространенной комбинацией автоматизации тестирования среди специалистов по контролю качества. В этом руководстве мы рассмотрели, как начать работу с Selenium Automation Testing with Java и написали наш самый первый тестовый пример. Кроме того, мы также узнали, как оптимизировать выполнение тестов с помощью параллельного тестирования и других лучших практик для создания надежного цикла тестирования. Я надеюсь, что этот учебник окажется полезным. Нам еще многое предстоит изучить!

Счастливого тестирования!

В рамках проекта Selenium разрабатываются драйверы для браузеров Firefox, Internet Explorer и Safari, а также драйверы для мобильных браузеров Android и iOS. Драйвер для браузера Google Chrome разрабатывается в рамках проекта Chromium, а драйвер для браузера Opera (включая мобильные версии) разрабатывается компанией Opera Software. Поэтому они формально не являются частью проекта Selenium, распространяются и поддерживаются независимо. Но логически, конечно, можно считать их частью семейства продуктов Selenium. Аналогичная ситуация и с клиентскими библиотеками – в рамках проекта Selenium разрабатываются библиотеки для языков Java, .Net (C#), Python, Ruby, JavaScript. Все остальные реализации не имеют отношения к проекту Selenium, хотя, возможно, в будущем, какие-то из них могут влиться в этот проект.

Исходя их этого, становится очевидным, что Selenium WebDriver по сути не является готовым инструментом для автоматизации тестирования. По своей сущности Selenium WebDriver представляет собой:

  1. спецификацию программного интерфейса для управления браузером,
  2. референсные реализации этого интерфейса для нескольких браузеров,
  3. набор клиентских библиотек для этого интерфейса на нескольких языках программирования.

WebDriver – это драйвер браузера, то есть не имеющая пользовательского интерфейса программная библиотека, которая позволяет различным другим программам взаимодействовать с браузером, управлять его поведением, получать от браузера какие-то данные и заставлять браузер выполнять какие-то команды. Исходя из этого определения, ясно, что WebDriver не имеет прямого отношения к тестированию. Он всего лишь предоставляет автотестам доступ к браузеру. На этом его функции заканчиваются.

Кто занимается остальным?

  1. Структурирование, группировку и запуск тестов, а также генерацию отчётов о тестировании, обеспечивает фреймворк тестирования, такой как JUnit или TestNG для Java, NUnit или Gallio для .Net, RSpec или Cucumber для Ruby и так далее.
  2. Разработка тестов ведётся в среде Eclipse, Intellij IDEA, Visual Studio, RubyMine и так далее.
  3. Сборка осуществляется посредством Maven, Gradle, Ant, NAnt,Rake и так далее.
  4. Запуск тестов по расписанию и публикацию отчётов выполняет сервер непрерывной интеграции – Jenkins, CruiseControl, Bamboo, TeamCity и так далее.

И всё это – самостоятельные инструменты, не имеющие отношения к проекту Selenium. Разумеется, WebDriver может использоваться не только при тестировании. Ему вообще безразлично, кто и зачем хочет управлять браузером. Вы можете автоматизировать какие-то рутинные задачи. Можете сделать ботов, которые будут флудить в форумах. Можете сделать скрипт, который автоматически снимает скриншоты для документации. Всё что угодно. Драйверу всё равно. Он всего лишь предоставляет доступ к браузеру.

При этом интерфейс самого WebDriver довольно скуден. Почему? Потому, что WebDriver – это:

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

При разработке Selenium WebDriver изначально была поставлена цель – не включать в него ничего лишнего. Стандартный интерфейс управления браузером должен быть простым и стабильным. Набор команд последовательно сокращался, были выброшены такие «повышающие удобство использования» команды как check, uncheck (для чекбоксов), select (для выпадающих списков). Все они сводятся к более простой команде click, и поэтому они лишние.

Но зато благодаря этой примитивности интерфейса сейчас для интерфейса WebDriver имеются реализации клиентских библиотек на Java, C#, Ruby, Python, JavaScript, PHP, Perl. И благодаря той же самой простоте WebDriver прекрасно интегрируется с любыми другими инструментами, встраивается в любой стек. В этом секрет его популярности и быстрого распространения – он не пытается «победить» другие инструменты, вместо этого он интегрируется с ними.

Задачу же удобства использования должны решать расширения, построенные на базе Selenium WebDriver. Именно они должны предоставлять расширенный набор команд, реализуя эти команды через примитивный интерфейс WebDriver. В дистрибутиве Selenium имеется класс Select, предназначенный для работы с выпадающими списками, который является наглядной демонстрацией того, как должны строиться расширения.

Постепенно появляются библиотеки, которые строятся на базе Selenium WebDriver и предоставляют более высокий уровень абстракции: Selenide, fluent-selenium, watir-webdriver, Thucidides. Популярные фреймворки для проектирования тестов позволяют наряду с другими драйверами использовать WebDriver. Среди таких фреймворков можно упомянуть Robot Framework, Capybara и тот же Thucidides. Число таких расширений и инструментов будет расти, сложность тоже. Так что вскоре может так случиться, что вы, используя какой-то инструмент, будете выполнять тесты, даже не подозревая о том, что взаимодействие с браузером осуществляется через драйвер Selenium WebDriver.

Таким образом в Webdriver определяется нужный элемент. Рассмотрим основные типы локаторов:

1. Id.Соответствует элементу, у которого атрибут id равен заданному значению. Данный вид локаторов является одним из самых быстрых в нахождении и одним из самых уникальных. Это связано с тем, что в DOM-структуре ссылки на элементы, у которых задан ID, хранятся в отдельной таблице, и через JScript (собственно именно через него осуществляется доступ к элементам на конечном уровне) обращение к элементам по ID идет достаточно короткой инструкцией.

2. Name. Соответствует элементу, у которого атрибут name равен заданному значению. Эффективно применяется при работе с полями ввода формы: 1) кнопки, 2) текстовые поля, 3) выпадающие списки. Как правило, значения элементов формы используются в запросах, которые идут на сервер и как раз атрибут name в этих запросах ставит в соответствие поле и его значение. Данный тип локаторов тоже является достаточно быстрым в нахождении, но менее уникальным, так как на странице может быть несколько форм, у которых могут быть элементы с одинаковым именем.

3. Class. Соответствует элементу, у которого атрибут class равен заданному значению. Как правило, является еще менее уникальным, чем предыдущие локаторы.

4. Link. Специально для ссылок используется отдельно зарезервированный тип локаторов, который находит нужную ссылку по ее тексту. Это сделано отчасти потому, что ссылки как правило не имеют таких атрибутов как ID или name. У ссылки есть фиксированная часть и есть часть, которая может варьироваться. В этом случае можно использовать wildcards, в частности ‘*’.

5. XPath. Наиболее универсальный тип локаторов. Как XPath формируется? HTML, как и его более обобщенная форма — XML, представляет собой различное сочетание тегов, которые могут содержать вложенные теги, а те в свою очередь тоже могут содержать теги и т.д. То есть, выстраивается определенная иерархия, наподобие структуры каталогов в файловой системе. И задача XPath — отразить подобный путь к нужному элементу, с учетом иерархии. Например, XPath вида A/B/C/D указывает на некоторый элемент с тегом D, который находится внутри тега C, а тот в свою очередь — внутри тега B, который находится внутри тега A, который находится на самом верхнем уровне иерархии.

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

У XPath есть много удобств, но есть и основной недостаток — низкая скорость нахождения объекта. В частности, с подобной проблемой можно столкнуться при работе с IE, так как при работе с XPath под IE используются JScript-библиотеки, которые не отличаются высокой скоростью выполнения. В таких случаях рекомендуется воспользоваться CSS-локаторами, но в некоторых случаях от XPath уйти не получится.

6. CSS. Данный тип локаторов основан на описаниях таблиц стилей (CSS), соответственно и синтаксис такой же. В отличие от локаторов по ID, по имени или по тексту ссылки, данный тип локаторов может учитывать иерархию объектов, а также значения атрибутов, что делает его ближайшим аналогом XPath. А в силу того, что объект находится по данному локатору быстрее, чем XPath, рекомендуется прибегать к помощи CSS вместо XPath. В CSS локаторе дочерний элемент отделяется символом >’:

Selenium is a powerful tool for controlling web browsers through programs and performing browser automation. It is functional for all browsers, works on all major OS and its scripts are written in various languages i.e Python, Java, C#, etc, we will be working with Python. Selenium Tutorial covers all topics such as – WebDriver, WebElement, Unit Testing with selenium. This Python Selenium Tutorial covers Selenium from basics to advanced and professional uses.

Selenium-Python-Tutorial

Why learn Selenium Python ?

  • Open Source and Portable – Selenium is an open source and portable Web testing Framework.
  • Combination of tool and DSL – Selenium is combination of tools and DSL (Domain Specific Language) in order to carry out various types of tests.
  • Easier to understand and implement – Selenium commands are categorized in terms of different classes which make it easier to understand and implement.
  • Less burden and stress for testers – As mentioned above, the amount of time required to do testing repeated test scenarios on each and every new build is reduced to zero, almost. Hence, the burden of tester gets reduced.
  • Cost reduction for the Business Clients – The Business needs to pay the testers their salary, which is saved using automation testing tool. The automation not only saves time but gets cost benefits too, to the business.

Selenium Basics

  • Selenium Basics
  • Components of Selenium
  • Applications and Uses
  • Features
  • Limitations

Selenium Python Basics

  • Selenium Python Introduction and Installation
  • Navigating links using get method
  • Interacting with Webpage
  • Locating single elements
  • Locating multiple elements
  • Locator Strategies – Selenium Python
  • Writing Tests using Selenium Python

Locating Strategies

  • Locating Single Elements –
    • find_element_by_id()
    • find_element_by_name()
    • find_element_by_xpath()
    • find_element_by_link_text()
    • find_element_by_partial_link_text()
    • find_element_by_tag_name()
    • find_element_by_class_name()
    • find_element_by_css_selector()
  • Locating Multiple Elements –
    • find_elements_by_name()
    • find_elements_by_xpath()
    • find_elements_by_link_text()
    • find_element_by_partial_link_text()
    • find_elements_by_tag_name()
    • find_elements_by_class_name()
    • find_elements_by_css_selector()

Waits

  • Explicit waits
  • Implicit Waits

Action Chains

  • Action Chains Basics
  • click
  • click_and_hold
  • context_click
  • double_click
  • drag_and_drop
  • key_down
  • key_up
  • move_by_offset
  • move_to_element
  • move_to_element_with_offset
  • release
  • reset_actions
  • send_keys

Advanced in Selenium Python –

  • Handling Exceptions – Selenium Python
  • Special Keys in Selenium Python
  • How to handle alert prompts in Selenium Python ?
  • Adding and Deleting Cookies in Selenium Python
  • How to move back and forward in History using Selenium Python ?
  • Special Keys in Selenium Python
  • Assertion in Selenium WebDriver using TestNg
  • Selenium Python Tricks
  • Page Object Model (POM)

Project Examples

  • Whatsapp using Python!
  • Browser Automation Using Selenium
  • Facebook Login using Python
  • Automating Happy Birthday post on Facebook using Selenium
  • How to access popup login window in selenium using Python
  • SMS Bomber using Selenium

Selenium WebDriver

Selenium Webdriver is the parent of all methods and classes used in Selenium Python. It is the driving force of Selenium that allows us to perform various operations on multiple elements on a webpage. Driver has various methods and attributes one can use to automate testing in Selenium Python. To check how to use webdriver, visit – Web Driver in Selenium Python . Various methods one can use in selenium Python are –

Method Description
add_cookie Adds a cookie to your current session.
back Goes one step backward in the browser history.
close Closes the current window.
create_web_element Creates a web element with the specified element_id.
delete_all_cookies Delete all cookies in the scope of the session.
delete_cookie Deletes a single cookie with the given name.
execute_async_script Asynchronously Executes JavaScript in the current window/frame.
execute_script Synchronously Executes JavaScript in the current window/frame.
forward Goes one step forward in the browser history.
fullscreen_window Invokes the window manager-specific ‘full screen’ operation
get_cookie Get a single cookie by name. Returns the cookie if found, None if not.
get_cookies Returns a set of dictionaries, corresponding to cookies visible in the current session.
get_log Gets the log for a given log type
get_screenshot_as_base64 Gets the screenshot of the current window as a base64 encoded string which is useful in embedded images in HTML.
get_screenshot_as_file Saves a screenshot of the current window to a PNG image file.
get_screenshot_as_png Gets the screenshot of the current window as a binary data.
get_window_position Gets the x, y position of the current window.
get_window_rect Gets the x, y coordinates of the window as well as height and width of the current window.
get_window_size Gets the width and height of the current window.
implicitly_wait Sets a sticky timeout to implicitly wait for an element to be found,
maximize_window Maximizes the current window that webdriver is using
minimize_window Invokes the window manager-specific ‘minimize’ operation
quit Quits the driver and closes every associated window.
refresh Refreshes the current page.
set_page_load_timeout Set the amount of time to wait for a page load to complete before throwing an error.
set_script_timeout Set the amount of time that the script should wait during an execute_async_script call before throwing an error.
set_window_position Sets the x, y position of the current window. (window.moveTo)
set_window_rect Sets the x, y coordinates of the window as well as height and width of the current window.
current_url Gets the URL of the current page.
current_window_handle Returns the handle of the current window.
page_source Gets the source of the current page.
title Returns the title of the current page.

Selenium WebElement

An element can be a tag, property, or anything, it is an instance of class selenium.webdriver.remote.webelement.WebElement. After you find an element on screen using selenium, you might want to click it or find sub-elements, etc. Selenium provides methods around this WebElement of Selenium. To checkout how to use element object in selenium, visit – WebElement in Selenium Python. Various methods one can use with an element in Selenium Python are discussed below –

Element Methods Description
is_selected() is_selected method is used to check if element is selected or not. It returns a boolean value True or False.
is_displayed() is_displayed method is used to check if element it visible to user or not. It returns a boolean value True or False.
is_enabled() is_enabled method is used to check if element is enabled or not. It returns a boolean value True or False.
get_property() get_property method is used to get properties of an element, such as getting text_length property of anchor tag.
get_attribute() get_attribute method is used to get attributes of an element, such as getting href attribute of anchor tag.
send_keys() send_keys method is used to send text to any field, such as input field of a form or even to anchor tag paragraph, etc.
click() click method is used to click on any element, such as an anchor tag, a link, etc.
clear() clear method is used to clear text of any field, such as input field of a form or even to anchor tag paragraph, etc.
screenshot() screenshot method is used to save a screenshot of current element to a PNG file.
submit() submit method is used to submit a form after you have sent data to a form.
value_of_css_property() value_of_css_property method is used to get value of a css property for a element.
location location method is used to get location of element in renderable canvas.
screenshot_as_png screenshot_as_png method is used to gets the screenshot of the current element as binary data.
parent parent method is used to get internal reference to the WebDriver instance this element was found from.
size size method is used to get size of current element.
tag_name tag_name method is used to get name of tag you are referring to.
text text method is used to get text of current element.
rect rect method is used to get a dictionary with the size and location of the element.
screenshot_as_base64 screenshot_as_base64 method is used to gets the screenshot of the current element as a base64 encoded string.

Last Updated :
13 Jul, 2023

Like Article

Save Article

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

1. Декларация WebDriver

System.setProperty(“webdriver.chrome.driver”, “/Users/username/Downloads”);
WebDriver driver = new ChromeDriver();

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

Интерфейс WebDriver

ChromiumDriver Extending RemoteWebDriver

RemoteWebDriver, реализующий метод get

2. Поиск элементов

Ниже приведён HTML-код для одного текстового поля ввода:

<input type=»text» id=»first_name» name=»first_name» class=»first_name input mb1″ placeholder=»First Name»>

a. Поиск по ID:

driver.findElement(By.Id(«first-name»));

b. Поиск по Xpath:

driver.findElement(By.xpath(«//input[@name=’first_name’]»));

c. Поиск по CSS-селекторам:

driver.findElement(By.cssSelector(«input.first_name»));

d. Поиск по классу:

driver.findElement(By.className(«.first_name»));

e. Поиск по тегу:

driver.findElement(By.tagName(«input»));

f. Поиск по Name:

driver.findElement(By.name(«first_name»));

g. Поиск гиперссылок:

Пожалуйста, найдите HTML-элемент ниже:

<a class=»jfHeader-menuListLink» href=»https://phptravels.com/demo» xpath=»1″>Demo Here</a>

i. Текст ссылки

driver.findElement(By.linkText(«Demo Here»));

ii. Частичный текст ссылки

driver.findElement(By.partialLinkText(«Demo»));

3. Выпадающий список, флажки и переключатели

a. Выпадающий список статического одиночного выбора

Пожалуйста, найдите HTML-код для статического выпадающего списка ниже:

<h3>Dropdown List</h3>
<select id=»dropdown»>
<option value=»» disabled=»disabled» selected=»selected»>
Please select an option </option>
<option value=»1″>Option 1</option>
<option value=»2″>Option 2</option>
</select>

Ознакомьтесь с фрагментом кода Selenium ниже:

import org.openqa.selenium.support.ui.Select;

Select option = new Select(driver.findElement(By.id(«dropdown»)));
option.selectByIndex(1);

b.Статический выпадающий список с несколькими вариантами выбора

Пожалуйста, найдите HTML-код для статического выпадающего списка с несколькими вариантами выбора ниже:

<h3>Dropdown List</h3>
<select multiple=»» id=»options»>
<option value=»1″>Option 1</option>
<option value=»2″>Option 2</option>
<option value=»3″>Option 3</option>
<option value=»4″>Option 4</option>
</select>

Пожалуйста, ознакомьтесь с фрагментом кода Selenium ниже:

import org.openqa.selenium.support.ui.Select;

Select options = new Select(driver.findElement(By.id(«options»)));
options.selectByVisibleText(«Option 1»);
options.selectByIndex(1);

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

  • selectByIndex(int IndexOfElement)
  • selectByValue(String Value)
  • selectByVisibleText(String Text)

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

  • deselectByIndex(int IndexOfElement)
  • deselectByValue(String Value)
  • deselectByVisibleText(String Text)

e. Флажки

Пожалуйста, найдите HTML-код для флажков ниже:

<h2 style=»text-align: left;»>
Check Boxes</h2>
My favourite colors are:<br />
<input name=»color» type=»checkbox» value=»red» />
Red<br />
<input name=»color» type=»checkbox» value=»yellow» />
Yellow<br />
<input name=»color» type=»checkbox» value=»blue» />
Blue<br />
<input name=»color» type=»checkbox» value=»orange» />
Orange<br />
<input name=»color» type=»checkbox» value=»green» />
Green<br />
<input name=»color» type=»checkbox» value=»purple» />
Purple<br />

Пожалуйста, найдите фрагмент кода Selenium для флажков ниже:

WebElement redColor = driver.findElement(By.xpath(«//input[@value=’red’]»));
redColor.click();

f. Кнопка переключения

Пожалуйста, ознакомьтесь с HTML-кодом ниже:

<h2 style=»text-align: left;»>
Radio Buttons</h2>
<div>
Your current web browser is:<br />
<input checked=»» name=»browser» type=»radio» value=»IE» />
Internet Explorer<br />
<input name=»browser» type=»radio» value=»Mozilla» />
Mozilla<br />
<input name=»browser» type=»radio» value=»Opera» />
Opera<br />
<br /></div>

Пожалуйста, ознакомьтесь с фрагментом кода Selenium для переключателей ниже:

driver.findElement(By.xpath(«//input[@value=’Mozilla’]»)).click();

4. Ожидание

a. Неявное ожидание

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.get(«http://somedomain/url_that_delays_loading»);
WebElement myDynamicElement = driver.findElement(By.id(«myDynamicElement»));

b. Явное ожидание

WebDriver driver = new ChromeDriver();
driver.get(«https://google.com/ncr»);
driver.findElement(By.name(«q»)).sendKeys(«cheese» + Keys.ENTER);
// Initialize and wait till element(link) became clickable — timeout in 10 seconds
WebElement firstResult = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.elementToBeClickable(By.xpath(«//a/h3»)));
// Print the first result
System.out.println(firstResult.getText());

Пожалуйста, обратите внимание, что не следует смешивать неявные и явные ожидания. Это может привести к непредсказуемому времени ожидания. Например, установка неявного ожидания в 10 секунд и явного ожидания в 15 секунд может привести к возникновению тайм-аута через 20 секунд.

c. Свободное ожидание

// Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(Duration.ofSeconds(30))
.pollingEvery(Duration.ofSeconds(5))
.ignoring(NoSuchElementException.class);

WebElement foo = wait.until(driver -> {
return driver.findElement(By.id(«foo»));
});

5. Работа с различными окнами

  • Чтобы получить дескриптор текущего окна — driver.getWindowHandle()
  • Чтобы получить все дескрипторы окна — driver.getWindowHandles()

6. Класс действий

a. Действие мыши

  • click() — Щёлкает по текущему местоположению курсора
  • DoubleClick() — Двойной щелчок по текущему местоположению курсора
  • contextClick() — Щелчок правой кнопкой мыши по текущему местоположению курсора
  • DragAndDrop(источник WebElement, цель WebElement) — Перетаскивает элемент из одного местоположения в другое
  • moveToElement(цель WebElement) — Перемещает элемент

b. Действие с клавиатуры

  • keyUp(WebElement target, java.lang.CharSequence key) — освобождает ключ после фокусировки на целевом элементе
  • keyDown(WebElement target, java.lang.CharSequence key) — выполняет нажатие клавиши после фокусировки на целевом элементе
  • SendKeys(WebElement target, java.lang.CharSequence… keys) — вводит последовательность клавиш

Фрагмент кода Selenium:

i. Пример сочетания действий

Actions builder = new Actions(driver);

Action seriesOfActions = builder
.moveToElement(textField)
.click()
.keyDown(txtUsername, Keys.SHIFT)
.sendKeys(txtUsername, «testingbot»)
.keyUp(txtUsername, Keys.SHIFT)
.doubleClick(txtUsername)
.contextClick()
.build();

seriesOfActions.perform();

ii. Пример перетаскивания

Actions action = new Actions(driver);

action.dragAndDrop(Sourcelocator, Destinationlocator).build().perform();

7. Теневой корневой элемент

Пожалуйста, найдите изображение HTML-кода для теневого корня ниже:

Пожалуйста, найдите приведённый ниже код, с помощью которого мы можем проверить в консоли, правильна ли наша стратегия поиска или нет:

document.querySelector(‘#container’).shadowRoot.querySelector(‘h1#inside’)

Пожалуйста, найдите фрагмент кода Selenium для теневого корневого селектора:

public WebElement getRootElement(WebElement element) {
WebElement shadowRootElement = (WebElement) ((JavascriptExecutor) driver)
.executeScript(«return arguments[0].shadowRoot»,element);
return shadowRootElement;
}

WebElement shadowRoot1 = getRootElement(driver.findElement(By.id(«container»)));

WebElement mainElement = shadowRoot1.findElement(By.id(«inside»));

8. Захват скриншота

Пожалуйста, найдите фрагмент кода selenium ниже, чтобы сделать снимок экрана и скопировать его по определённому пути

import java.io.File;
import org.apache.commons.io.FileUtils;

TakesScreenshot scrShot =((TakesScreenshot)webdriver);
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);

//Move image file to new destination
File DestFile=new File(fileWithPath);
//Copy file at destination
FileUtils.copyFile(SrcFile, DestFile);

9. Загрузка файла

Пожалуйста, ознакомьтесь с фрагментом кода selenium для загрузки файла ниже:

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import io.github.bonigarcia.wdm.WebDriverManager;

class fileUploadDoc{
public static void main(String[] args) {
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get(«https://the-internet.herokuapp.com/upload»);

//We want to import selenium-snapshot file.
driver.findElement(By.id(«file-upload»)).sendKeys(«selenium-snapshot.jpg»);
driver.findElement(By.id(«file-submit»)).submit();
if(driver.getPageSource().contains(«File Uploaded!»)) {
System.out.println(«file uploaded»);
}
else{
System.out.println(«file not uploaded»);
}
driver.quit();
}
}

10. Действия с клавиатуры

a. Использование класса действий

Keys cmdCtrl = Platform.getCurrent().is(Platform.MAC) ? Keys.COMMAND : Keys.CONTROL;

WebElement textField = driver.findElement(By.id(«textInput»));
new Actions(driver)
.sendKeys(textField, «Selenium!»)
.sendKeys(Keys.ARROW_LEFT)
.keyDown(Keys.SHIFT)
.sendKeys(Keys.ARROW_UP)
.keyUp(Keys.SHIFT)
.keyDown(cmdCtrl)
.sendKeys(«xvv»)
.keyUp(cmdCtrl)
.perform();

Assertions.assertEquals(«SeleniumSelenium!», textField.getAttribute(«value»));

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

11. Таблицы

Таблица в основном состоит из заголовка, строк и табличных данных.

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

a. Чтобы получить все заголовки таблиц

//By this we will get an idea of column numbers as well
driver.findElements(By.cssSelector(«table>thead>tr>th»));

b. Чтобы получить отдельный элемент строки

//We will have to change the nth-child(row_number) accordingly
driver.findElement(By.cssSelector(«tbody>tr:nth-child(2)»));

c. Чтобы получить все элементы строки

//By this we will get all the row elements
driver.findElements(By.cssSelector(«tbody>tr»));

d. Для получения значений отдельных табличных данных

//By this we will get all the table data elements of the first row
driver.findElements(By.cssSelector(«table>tbody>tr:nth-child(1)>td»));

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

12. Некоторые общие операции с использованием Selenium

a. Режим «В полный экран»

driver.manage().window().maximize();

b. Сворачивание окна

driver.manage().window().minimize();

Ниже приведены различные методы, доступные в “окне”:

c. Использование файлов cookie

i. Добавление файла cookie

driver.manage().addCookie(new Cookie(«session-id», «1234-5678»));

ii. Получение всех файлов cookie

driver.manage().getCookies();

iii. Получение файла cookie с именем ‘session-id’

driver.manage().getCookieNamed(«session-id»);

iv. Удаление файла cookie с именем ‘session-id’

driver.manage().deleteCookieNamed(«session-id»);

v. Удаление всех файлов cookie

driver.manage().deleteAllCookies();

d. Чтобы выйти/закрыть браузер

i. driver.close() — закрывает текущее окно браузера, в котором выполняются автоматические скрипты

ii. driver.quit() — закрывает все окно браузера

13. Обработка фреймов

Пожалуйста, ознакомьтесь с HTML-кодом ниже:

<div id=»modal»>
<iframe id=»buttonframe» name=»myframe» src=»https://seleniumhq.github.io»>
<button>Click here</button>
</iframe>
</div>

a. driver.switchTo.frame(int frameNumber) — указав номер индекса фрейма, драйвер переключится на него

// Switches to the second frame
driver.switchTo().frame(1);

b. driver.switchTo.frame(строка frameNameOrID) — при упоминании элемента фрейма или идентификатора драйвер переключится на этот конкретный фрейм

//Using the ID
driver.switchTo().frame(«buttonframe»);

//Or using the name instead
driver.switchTo().frame(«myframe»);

//Now we can click the button
driver.findElement(By.tagName(«button»)).click();

c. driver.switchTo.frame(WebElement frameElement) — при упоминании веб-элемента фрейма драйвер переключится на этот конкретный фрейм

//Store the web element
WebElement iframe = driver.findElement(By.cssSelector(«#modal>iframe»));

//Switch to the frame
driver.switchTo().frame(iframe);

//Now we can click the button
driver.findElement(By.tagName(«button»)).click();

d. driver.switchTo().defaultContent() — возврат к главному окну

// Return to the top level
driver.switchTo().defaultContent();

14. Обработка оповещений

a. Для обработки простых оповещений нажмите кнопку «OK»

//Click the link to activate the alert
driver.findElement(By.linkText(«See an example alert»)).click();

//Wait for the alert to be displayed and store it in a variable
Alert alert = wait.until(ExpectedConditions.alertIsPresent());

//Store the alert text in a variable
String text = alert.getText();

//Press the OK button
alert.accept();

б. Обработка оповещений с помощью кнопок ‘OK’ и ‘Cancel’

//Click the link to activate the alert
driver.findElement(By.linkText(«See a sample confirm»)).click();

//Wait for the alert to be displayed
wait.until(ExpectedConditions.alertIsPresent());

//Store the alert in a variable
Alert alert = driver.switchTo().alert();

//Store the alert in a variable for reuse
String text = alert.getText();

//Press the Cancel button
alert.dismiss();

c. Для отправки символов во всплывающее окно с предупреждением

//Click the link to activate the alert
driver.findElement(By.linkText(«See a sample prompt»)).click();

//Wait for the alert to be displayed and store it in a variable
Alert alert = wait.until(ExpectedConditions.alertIsPresent());

//Type your message
alert.sendKeys(«Selenium»);

//Press the OK button
alert.accept();

Вы можете ознакомиться с подсказками на этой странице.

15. Разные фрагменты Selenium

a. Обработка ненадёжных сертификатов

//Create instance of ChromeOptions Class
ChromeOptions handlingSSL = new ChromeOptions();

//Using the setAcceptInsecureCerts method with true as parameter to accept the untrusted certificate
handlingSSL.setAcceptInsecureCerts(true);

//Creating instance of Chrome driver by passing the desied reference of ChromeOptions object
WebDriver driver = new ChromeDriver(handlingSSL);

b. Желаемые возможности

FirefoxOptions browserOptions = new FirefoxOptions();
browserOptions.setPlatformName(«Windows 10»);
browserOptions.setBrowserVersion(«92»);
Map<String, Object> cloudOptions = new HashMap<>();
cloudOptions.put(«build», myTestBuild);
cloudOptions.put(«name», myTestName);
browserOptions.setCapability(«cloud:options», cloudOptions);
WebDriver driver = new RemoteWebDriver(new URL(cloudUrl), browserOptions);

Ссылки на рекомендуемые источники:

Статья была взята из этого источника:

Понравилась статья? Поделить с друзьями:
  • Зарядное устройство cdq 50ad плюс 50a инструкция
  • Уарк 105 руководство по эксплуатации
  • Руководство по эксплуатации рхбз
  • Aircomb 5 10 mg инструкция на русском
  • Konnwei kw208 тестер батареи инструкция на русском языке