Python — это язык программирования, который не нуждается в представлении! Это один из наиболее предпочтительных языков, когда речь идет о проектах, связанных с машинным обучением (ML), искусственным интеллектом (AI) и многим другим. На другом поле боя сочетание Selenium Python является широко предпочтительным для автоматизации веб-сайтов.
Согласно исследованию Stack Overflow Developer Survey 2021, Python является третьим по популярности языком после JavaScript и HTML/CSS. Взаимодействие Selenium и Python помогает автоматизировать взаимодействие с веб-элементами в DOM (Document Object Model).
Источник
Как же начать работу с Selenium и Python для автоматизации тестирования Selenium? Этот учебник по Selenium Python глубоко погружается в основные аспекты Selenium и Python, изучение которых будет полезным в вашем путешествии по автоматизации веб-процессов.
Если у вас нет опыта работы с Selenium или вы хотите узнать больше о том, что такое Selenium, обязательно ознакомьтесь с нашим подробным руководством по Selenium WebDriver, чтобы получить представление о системе автоматизации Selenium.
Что такое привязки Selenium Python
Связки Selenium Python предоставляют API, с помощью которых вы можете писать функциональные тесты с использованием Selenium WebDriver. Как и другие языковые привязки Selenium, Selenium Python API можно использовать для разработки высокоэффективных тестов, позволяющих взаимодействовать с веб-элементами на тестируемом приложении (AUT).
Связка поддерживает локальные драйверы браузеров (например, Chrome, Firefox, Internet Explorer и т.д.) и предоставляет удаленный WebDriver, позволяющий подключаться к удаленной облачной Selenium Grid.
Как настроить Python и Selenium для автоматизации веб-тестирования
В этой части учебника по Selenium Python мы рассмотрим шаги, связанные с настройкой среды разработки для автоматизированного тестирования Selenium с помощью Python.
Необходимым условием для установки Selenium Python является наличие Python. Поэтому, прежде чем приступить к дальнейшим шагам, убедитесь, что Python установлен на вашей машине. На момент написания этого блога последняя стабильная версия Python была 3.9.7.
Для установки Selenium в Python выполните описанные ниже шаги:
Шаг 1: Установите Python
Как и мне, если на вашей машине установлено несколько версий Python, вам нужно будет использовать python3 для использования Python 3.9.7. Однако если вы работаете на Mac, то при запуске команды python будет использоваться Python 2, в то время как при запуске команды python3 будет использоваться Python 3.9.7.
Шаг 2: Скачайте и установите pip
Чтобы установить Selenium Python, необходимо воспользоваться pip, системой управления пакетами для Python. Мы будем устанавливать pip3, чтобы иметь возможность использовать Python 3 для разработки тестовых сценариев.
Установка pip на Mac
- Выполните приведенную ниже команду в терминале для загрузки pip на вашу машину:
- Выполните приведенную ниже команду для установки pip3 на вашей машине:
python3 get-pip.py
- Проверьте успешность установки pip3, выполнив в терминале команду pip3 -version.
pip3 --version
Установка pip в Windows
- Для Windows загрузите get-pip.py на локальную машину и выполните приведенную ниже команду для установки pip:
python get-pip.py
- Вы можете подтвердить успешность установки pip, выполнив в терминале следующую команду:
pip --version
Шаг 3: Скачайте и установите Selenium
Теперь, когда pip успешно установлен, пришло время установить Selenium в Python. Сначала для установки Selenium используется соответствующая команда pip (или pip3). Затем выполните описанные ниже действия в зависимости от операционной системы.
Установка Selenium на Mac
- Поскольку для тестирования мы используем Python 3.9.7, для установки Selenium в Python мы будем использовать команду pip3. Запустите команду pip3 install selenium в терминале:
pip3 install selenium
Как видно выше, Selenium 3.141 (текущая стабильная версия Selenium) успешно установлен на машину.
- Выполните команду pip freeze | grep «selenium», чтобы проверить версию Selenium, установленную на машине. В моем случае на машине установлено несколько версий Selenium, но это не должно вызвать никаких проблем при автоматизированном веб-тестировании с помощью Selenium Python.
pip freeze | grep "selenium"
Установка Selenium на Windows
- Выполните команду pip install -U selenium в командной строке (или терминале), чтобы установить Selenium на Windows.
pip install -U selenium
- Теперь, когда установка Selenium для Python завершена, выполните следующую команду, чтобы проверить статус установки:
python -c "import selenium; print(selenium.__version__)"
Ниже показан вывод вышеуказанной команды, который указывает на то, что установка прошла успешно.
Шаг 4: Установите фреймворк PyTest
PyUnit (или unittest), фреймворк тестирования по умолчанию, является производным от фреймворка JUnit. Поскольку он доступен из коробки, его можно использовать как для модульного тестирования, так и для автоматизации тестирования Selenium.
PyUnit, при использовании с Selenium, также может быть использован для параллельного тестирования в Selenium. Однако самым большим недостатком PyUnit является необходимость использования шаблонного кода для реализации тестов. Кроме того, фреймворк также использует соглашение об именовании camelCase, популярное в Java.
Если вы хотите узнать больше о фреймворке PyUnit для автоматизации тестирования на Python, обязательно ознакомьтесь с нашим подробным руководством по PyUnit Selenium Python, которое охватывает все аспекты упомянутого фреймворка. В этом учебнике по Selenium Python мы будем использовать PyTest, более широко используемый фреймворк по сравнению с PyUnit.
Установка PyTest на Mac
- Выполните команду pip3 install pytest для установки последней версии pytest.
pip3 install pytest
Как видно ниже, pytest-6.2.5 был успешно установлен на машину.
- Проверьте, была ли соответствующая версия фреймворка PyTest успешно установлена, выполнив в терминале следующую команду pip freeze | grep «pytest».
pip freeze | grep "pytest"
Установка PyTest на Windows
- PyTest на Windows можно установить, выполнив в терминале команду pip install -U pytest.
pip install -U pytest
- Проверьте, была ли установка PyTest успешной или нет, выполнив в терминале команду pytest -version.
pytest --version
Шаг 5: Установите драйверы браузера (необязательно для облачной Selenium Grid)
Этот шаг применим только для Selenium Python тестов, которые должны выполняться на локальной Selenium Grid. Архитектура Selenium WebDriver показывает, что клиентские библиотеки Selenium взаимодействуют с веб-браузером через соответствующий драйвер браузера.
Для тестирования Selenium Python на локальном Selenium необходимо загрузить драйвер(ы) браузера (в соответствии с браузером и версией браузера) на локальную машину. Вы должны загрузить и скопировать драйвер браузера в то место, где находится исполняемый файл браузера (например, Chrome.exe для браузера 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://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Поскольку я буду выполнять тест Selenium Python в браузере Chrome, я загрузил драйвер Chrome Driver, соответствующий версии браузера Chrome. Как показано ниже, я загрузил драйвер Chrome Driver (v 94.0.4606.61) по указанной выше ссылке.
Рекомендуется поместить драйвер браузера (т.е. в нашем случае это ChromeDriver) в то место, где находится исполняемый файл браузера.
Для Mac
Для Windows
Итак, мы готовы запустить наш первый Selenium Python тест на локальной Selenium Grid. Для демонстрации мы будем использовать фреймворк PyTest. Позже в этом учебнике по Selenium Python мы также рассмотрим, как запускать параллельные тесты на облачной Selenium Grid (например, LambdaTest) с помощью фреймворка PyTest.
LambdaTest — это мощная облачная Selenium Grid, которая позволяет очень просто проводить интерактивное кросс-браузерное тестирование ваших живых и локальных веб-сайтов и веб-приложений на 2000+ онлайн-браузерах, работающих на реальной операционной системе.
Как запускать автоматизированные веб-тесты с помощью Selenium и Python
Теперь, когда мы рассмотрели основные моменты, связанные с настройкой Selenium в Python, давайте замажем руки, протестировав несколько реальных тестовых сценариев. В этом учебнике по Selenium Python мы запустим два тестовых сценария на локальной Selenium Grid. Ниже приведены подробности:
Сценарии тестирования
Тестовый сценарий — 1 (Браузер — Firefox)
Перейдите на страницу URL https://lambdatest.github.io/sample-todo-app/.
Установите первые два флажка.
Отправьте ‘Happy Testing at LambdaTest’ в текстовое поле с id = sampletodotext.
Нажмите кнопку Добавить и проверьте, был ли добавлен текст или нет.
Сценарий тестирования — 2 (Браузер — Chrome)
Перейдите на страницу URL https://www.google.com.
Найдите поисковую строку.
Отправьте ‘LambdaTest’ в строку поиска.
Нажмите на ссылку, содержащую URL домашней страницы LambdaTest.
Настройка проекта
Прежде чем мы углубимся в реализацию, мы сделаем краткий обзор установки, которую мы используем для реализации сценариев. Для создания базы для реализации и запуска Selenium Python тестов я взял листок из следующего обучающего видео по PyTest:
Я использую Visual Studio (VS) Code IDE и менеджер пакетов Poetry (вместо pip), поскольку он поставляется со всеми необходимыми инструментами для более детерминированного управления проектом.
Однако вместо VS Code можно использовать альтернативные Python IDE, такие как PyCharm, Atom, Sublime Text и т.д. Поскольку мы уже установили Selenium и PyTest с помощью pip, мы можем приступать к выполнению Selenium-тестирования на Python.
Выполните описанные ниже шаги для создания Selenium Python Project в VS Code:
Шаг 1
Создайте папку с именем «python-tutorial», в которой будут находиться файлы и папки, содержащие тестовый код.
Шаг 2 (Применимо только для менеджера пакетов Poetry)
Если пакет poetry не установлен, выполните соответствующую команду для установки пакета:
- Для Mac — pip3 install poetry
- Для Windows — pip install poetry
Поскольку мы используем менеджер пакетов poetry, выполните команду poetry init в терминале VS. Эта команда создает конфигурационный файл pyproject.toml. При создании конфигурационного файла выберите версию Python, доступную на вашей машине (т.е. Python 3.9).
Мы устанавливаем следующие пакеты с помощью Poetry (через pyproject.toml):
- Selenium (v 3.141.59)
- PyTest (v 6.2.5)
- pytest-xdist (v 2.4.0)
- Autopep8
- Flake8
Autopep8 автоматически форматирует код Python в соответствии с руководством по стилю PEP 8. Flake8 — это пакет Python, который помогает проверить кодовую базу на соответствие стилю кодирования (PEP8), ошибки программирования и т.д. Для установки вышеперечисленных пакетов введите соответствующее имя пакета (например, selenium/pytest/autopep8/flake8).
После добавления всех пакетов в файл TOML нажмите Enter, чтобы завершить генерацию файла.
Чтобы установить пакеты, указанные в конфигурационном файле, выполните команду poetry install в терминале VS Code. По завершении будут сгенерированы файлы pyproject.toml и poetry.lock.
poetry install
В следующем разделе этого учебника по Selenium Python мы рассмотрим реализацию двух тестовых сценариев.
Реализация (тестовый сценарий — 1)
#Implementation of Selenium WebDriver with Python using PyTest
import pytest
from selenium import webdriver
import sys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
def test_lambdatest_todo_app():
ff_driver = webdriver.Firefox()
ff_driver.get('https://lambdatest.github.io/sample-todo-app/')
ff_driver.maximize_window()
ff_driver.find_element_by_name("li1").click()
ff_driver.find_element_by_name("li2").click()
title = "Sample page - lambdatest.com"
assert title == ff_driver.title
sample_text = "Happy Testing at LambdaTest"
email_text_field = ff_driver.find_element_by_id("sampletodotext")
email_text_field.send_keys(sample_text)
sleep(5)
ff_driver.find_element_by_id("addbutton").click()
sleep(5)
output_str = ff_driver.find_element_by_name("li6").text
sys.stderr.write(output_str)
sleep(2)
ff_driver.quit()
Реализация (тестовый сценарий — 2)
#Implementation of Selenium WebDriver with Python using PyTest
import pytest
from selenium import webdriver
import sys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
def test_lambdatest_google():
chrome_driver = webdriver.Chrome()
chrome_driver.get('https://www.google.com')
chrome_driver.maximize_window()
if not "Google" in chrome_driver.title:
raise Exception("Could not load page")
element = chrome_driver.find_element_by_name("q")
element.send_keys("LambdaTest")
element.submit()
# Check if the LambdaTest Home Page is open
title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest"
lt_link = chrome_driver.find_element_by_xpath("//h3[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']")
lt_link.click()
sleep(5)
assert title == chrome_driver.title
sleep(2)
chrome_driver.quit()
Описание кода
Поскольку используемые Selenium Python API более или менее одинаковы в обоих тестовых сценариях, мы делаем общий обзор кода.
Шаг 1: Импортируйте Selenium WebDriver, pytest, Keys и другие соответствующие классы из Selenium.
import pytest
from selenium import webdriver
import sys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
Класс Keys в Selenium Python позволяет выполнять соответствующие действия с клавиатурой над Web-элементами в DOM. PyTest в Selenium Python в основном используется для модульного тестирования. Этот фреймворк является довольно исчерпывающим (по сравнению с фреймворком unittest) и предоставляет механизм для реализации параметризованного тестирования с помощью Python.
Шаг 2: Модуль времени в Selenium Python предоставляет множество способов приостановить выполнение на заданный промежуток времени. Для демонстрации мы используем блокирующую функцию sleep(), что не считается лучшей практикой Selenium.
from time import sleep
Вы также можете использовать Selenium wait в Python для более эффективной обработки загрузки динамических элементов.
Шаг 3: Правильные имена (начинающиеся с test_) присваиваются тестовым методам в обоих тестовых файлах.
Тест — 1
def test_lambdatest_todo_app():
Тест — 2
def test_lambdatest_google():
Шаг 4: Следующий шаг — создание экземпляра соответствующего браузера (т.е. Firefox для теста-1 и Chrome для теста-2) для выполнения тестов. В обоих случаях мы загрузили драйвер браузера в то место, где находится исполняемый файл браузера.
Если вы планируете запускать тесты на Safari, обязательно ознакомьтесь с нашим подробным блогом, в котором подробно описано, как запускать Selenium-тесты на Safari с помощью драйвера Safari.
Тест — 1
ff_driver = webdriver.Firefox()
Тест — 2
chrome_driver = webdriver.Chrome()
Шаг 5:
Тест — 1
Метод find element в Selenium Python используется для поиска соответствующего WebElement с помощью свойства NAME. Тестируемый URL — это LambdaTest ToDo Page.
Метод find element в Selenium Python используется для нахождения соответствующего WebElement с помощью свойства NAME. Тестируемый URL — это страница LambdaTest ToDo Page.
ff_driver.find_element_by_name("li1").click()
ff_driver.find_element_by_name("li2").click()
Вот как мы нашли веб-элементы (li1 и li2) с помощью инструмента Inspect в Chrome.
Тест 2
Здесь тестируемым URL является домашняя страница Google. Если заголовок окна не соответствует ожидаемому заголовку, возникает исключение.
if not "Google" in chrome_driver.title:
raise Exception("Could not load page")
element = chrome_driver.find_element_by_name("q")
Поле поиска на домашней странице Google находится с помощью метода find_element_by_name. Вот как мы получаем сведения о нужном веб-элементе с помощью инструмента Inspect в Chrome:
Шаг 6:
Тест 1
title = "Sample page - lambdatest.com"
assert title == ff_driver.title
Текущий заголовок окна сравнивается с ожидаемым заголовком (например, Sample page — lambdatest.com). Если заголовок окна не совпадает с ожидаемым заголовком, выдается сообщение Assert. Помимо этого руководства по Selenium Python, вы можете ознакомиться с нашим подробным блогом об утверждениях в Selenium Python, чтобы получить более глубокое понимание того, как использовать утверждения при выполнении автоматизированного тестирования на Python.
Тест 2
Send Keys в Selenium используется для ввода поискового термина (т.е. LambdaTest) в поле поиска, которое было расположено с помощью метода find_element_by_name().
element.send_keys("LambdaTest")
Метод Submit в Selenium используется для отправки формы в Selenium. Существуют и другие способы достижения той же задачи, но submit() — самый эффективный из них!
element.submit()
Шаг 7:
Тест 1
В список ToDo добавляется новый пункт (например, Happy Testing at LambdaTest). Затем с помощью метода find_element и свойства ID находится нужный WebElement.
sample_text = "Happy Testing at LambdaTest"
email_text_field = ff_driver.find_element_by_id("sampletodotext")
Новый элемент добавляется в список ToDo с помощью метода send_keys() в Selenium.
email_text_field.send_keys(sample_text)
Тест 2
Элемент find по XPath в Selenium используется для нахождения соответствующего результата поиска от Google. Мы используем POM Builder, надстройку для Chrome, которая позволяет легко извлечь XPath нужного веб-элемента. Вы также можете использовать SelectorsHub для Chrome, чтобы найти XPath, CSS Selector и другие веб-локаторы с помощью нескольких щелчков мыши.
title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest"
lt_link = chrome_driver.find_element_by_xpath("//h3[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']")
Теперь, когда соответствующая поисковая ссылка найдена, команда click в Selenium используется для нажатия и открытия нужной страницы.
lt_link.click()
Шаг 8:
Тест 1
Мы выполняем проверку, успешно ли добавленный элемент добавлен в список ToDo или нет. Элемент li6 находится с помощью свойства NAME.
Текст соответствующего Web-элемента считывается с помощью метода text. Метод getText в Selenium часто используется, когда необходимо прочитать текстовые атрибуты Web-элемента. В данном случае метод вернет атрибут text элемента li6 (т.е. Happy Testing at LambdaTest).
output_str = ff_driver.find_element_by_name("li6").text
Метод quit() в Selenium используется для уничтожения экземпляра браузера Firefox.
ff_driver.quit()
Тест 2
Если заголовок текущего окна (т.е. домашней страницы LambdaTest) не совпадает с ожидаемым заголовком, возникает сигнал Assert.
title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest"
assert title == chrome_driver.title
По завершении выполнения теста экземпляр браузера Chrome уничтожается с помощью метода quit().
chrome_driver.quit()
Выполнение тестов
Поскольку у нас есть два тестовых файла (т.е. test_lambdatest_todo.py и test_lambdatest_google.py), мы запускаем тесты последовательно, выполнив в терминале следующую команду
pytest -s tests/test_lambdatest_todo.py tests/test_lambdatest_google.py
Это приведет к последовательному выполнению тестов (т.е. непараллельному выполнению). Это не рекомендуется делать, так как это увеличивает время выполнения. Это определенно не рекомендуется для крупномасштабных проектов!
Вот скриншот выполнения теста:
Тест — 1 Выполнение
Тест — 2 Выполнение
Как видно ниже, тесты были выполнены успешно:
Эта сертификация предназначена для профессионалов, желающих развить передовые практические знания в области автоматизированного тестирования Selenium с помощью Python и поднять свою карьеру на новый уровень.
Вот краткий обзор сертификации Selenium Python 101 от LambdaTest:
Как запускать параллельные Selenium-тесты с помощью Python
В этом разделе учебника Selenium Python мы рассмотрим, как выполнять параллельное тестирование с помощью Python и Selenium.
По умолчанию фреймворки PyUnit и PyTest поддерживают только последовательное выполнение тестов (т.е. поддержка параллельного выполнения тестов отсутствует). Параллельное выполнение в Selenium обеспечивает ряд преимуществ, основными из которых являются ускоренное выполнение тестов, повышение качества продукции и ускорение выхода на рынок.
Однако параллельно выполнять тесты Selenium Python относительно просто с помощью фреймворка PyTest. Все, что вам нужно сделать, это установить плагин pytest-xdist.
Вот различные режимы выполнения, поддерживаемые плагином pytest-xdist:
- Multi-process load balancing — Для выполнения параллельного теста можно использовать несколько процессоров или хостов.
- LooponFail — Тесты многократно выполняются в подпроцессе.
- Многоплатформенное покрытие — Обеспечивает гибкость использования нескольких интерпретаторов Python (например, PyTest, PyUnit и т.д.) в одном прогоне теста.
Ниже описаны шаги по установке плагина pytest-xdist для параллельного запуска Selenium Python тестов:
- Mac: pip3 install pytest-xdist
- Windows: pip install pytest-xdist
Как показано ниже, плагин pytest-xdist предоставляет ряд опций командной строки для использования доступных процессоров для параллельного запуска тестов Selenium Python.
В нашем случае мы будем использовать 2 ядра CPU (с помощью опции -n) для параллельного выполнения двух тестовых сценариев. Здесь параллельное выполнение происходит на уровне файлов (т.е. тестовые методы в двух файлах выполняются параллельно).
pytest -s <file_names> --verbose -n=<number_of_cpus>
где < «number_of_cpus»> = 2
Поскольку мы уже установили плагин pytest-xdist с помощью поэлементной установки, мы не выполняли команду pip для установки плагина.
Чтобы запустить два теста параллельно, выполните следующую команду в терминале:
pytest -s tests/test_lambdatest*.py --verbose -n=2
Как видно на снимке выполнения, оба теста выполняются параллельно на локальной Selenium Grid.
Оба теста были успешно выполнены почти за 19 секунд.
Кроме этого руководства по Selenium Python, если вам нужна дополнительная информация о параллельном тестировании в Selenium Python, обязательно ознакомьтесь с нашим подробным руководством по PyTest, в котором подробно рассматриваются все аспекты параллельного выполнения с PyTest в Selenium.
Как запускать тесты Selenium Python на Cloud Selenium Grid
В этом руководстве по Selenium Python мы рассмотрели, что выполнение Selenium-тестов на Python в локальной Selenium Grid является хорошим решением, только если количество тестовых сценариев и комбинаций тестов невелико. Например, рассмотрим сценарий, когда у вас есть машина Mac, а вам нужно выполнить кросс-браузерные тесты на комбинации (Internet Explorer + Windows 10).
Что ж, тестирование на Internet Explorer все еще не ушло в прошлое! Но, кроме того, поддержание собственной инфраструктуры Grid, в которой установлены машины с различными браузерами, версиями браузеров и платформами, является дорогостоящим предложением.
Именно здесь облачное Selenium тестирование может сыграть важную роль в выполнении Selenium Python тестов на различных виртуальных браузерах, версиях браузеров и операционных системах. LambdaTest — одна из таких платформ, которая предоставляет масштабируемую, безопасную и надежную облачную инфраструктуру Selenium Grid, позволяющую запускать Selenium Python тесты в масштабе.
С точки зрения разработчика, вам просто нужно перейти от локального Selenium WebDriver к удаленному Selenium WebDriver. По сути, это означает изменение всего нескольких строк кода, и это с точки зрения инфраструктуры!
Чтобы начать работу с облачной Selenium Grid на LambdaTest, создайте учетную запись. После создания профиля запишите имя пользователя и ключ доступа в разделе профиля LambdaTest. Далее вы можете сгенерировать желаемые возможности браузера, выбрав параметры браузера и ОС в Selenium Capabilities Generator.
Для демонстрации использования облачной Selenium Grid для параллельного запуска Selenium Python тестов, мы перенесем предыдущие тесты так, чтобы они запускались на следующих комбинациях:
Тестовый пример — 1 (Chrome — 92, Windows 10)
- Перейдите на URL https://lambdatest.github.io/sample-todo-app/.
- Установите первые два флажка
- Отправьте ‘Happy Testing at LambdaTest’ в текстовое поле с id = sampletodotext
- Нажмите кнопку Добавить и проверьте, был ли добавлен текст или нет.
Сценарий тестирования — 2 (Safari — 14, macOS Big Sur)
- Перейдите на страницу URL https://www.google.com.
- Найдите поле поиска
- Отправьте ‘LambdaTest’ в строку поиска
- Нажмите на ссылку, содержащую URL домашней страницы LambdaTest.
Ниже показана реализация, в которой тесты будут выполняться на LambdaTest Selenium Grid вместо локальной Selenium Grid:
Реализация (Сценарий тестирования — 1)
#Implementation of Selenium WebDriver with Python using PyTest
import pytest
from selenium import webdriver
import sys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
saf_capabilities = {
"build" : "Porting test to LambdaTest Selenium Grid (Safari)",
"name" : "Porting test to LambdaTest Selenium Grid (Safari)",
"platform" : "MacOS Big sur",
"browserName" : "Safari",
"version" : "14.0"
}
def test_lambdatest_todo_app():
# ff_driver = webdriver.Firefox()
# Profile Link - https://accounts.lambdatest.com/detail/profile
user_name = "user_name"
app_key = "access_key"
# chrome_driver = webdriver.Chrome()
remote_url = "https://" + user_name + ":" + app_key + "@hub.lambdatest.com/wd/hub"
ff_driver = webdriver.Remote(command_executor = remote_url, desired_capabilities = saf_capabilities)
ff_driver.get('https://lambdatest.github.io/sample-todo-app/')
ff_driver.maximize_window()
ff_driver.find_element_by_name("li1").click()
ff_driver.find_element_by_name("li2").click()
title = "Sample page - lambdatest.com"
assert title == ff_driver.title
sample_text = "Happy Testing at LambdaTest"
email_text_field = ff_driver.find_element_by_id("sampletodotext")
email_text_field.send_keys(sample_text)
sleep(5)
ff_driver.find_element_by_id("addbutton").click()
sleep(5)
output_str = ff_driver.find_element_by_name("li6").text
sys.stderr.write(output_str)
sleep(2)
ff_driver.quit()
Реализация (сценарий тестирования — 2)
#Implementation of Selenium WebDriver with Python using PyTest
import pytest
from selenium import webdriver
import sys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
ch_capabilities = {
"build" : "Porting test to LambdaTest Selenium Grid (Firefox)",
"name" : "Porting test to LambdaTest Selenium Grid (Firefox)",
"platform" : "Windows 10",
"browserName" : "Chrome",
"version" : "92.0"
}
def test_lambdatest_google():
# Profile Link - https://accounts.lambdatest.com/detail/profile
user_name = "user_name"
app_key = "access_key"
# chrome_driver = webdriver.Chrome()
remote_url = "https://" + user_name + ":" + app_key + "@hub.lambdatest.com/wd/hub"
chrome_driver = webdriver.Remote(command_executor = remote_url, desired_capabilities = ch_capabilities)
chrome_driver.get('https://www.google.com')
chrome_driver.maximize_window()
if not "Google" in chrome_driver.title:
raise Exception("Could not load page")
element = chrome_driver.find_element_by_name("q")
element.send_keys("LambdaTest")
element.submit()
# Check if the LambdaTest Home Page is open
title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest"
lt_link = chrome_driver.find_element_by_xpath("//h3[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']")
lt_link.click()
sleep(5)
assert title == chrome_driver.title
sleep(2)
chrome_driver.quit()
Описание кода
Поскольку основная функциональная логика осталась неизменной, мы просто сосредоточимся на изменениях, которые мы сделали для запуска Selenium Python тестов на LambdaTest Grid.
Вот возможности браузера (сгенерированные с помощью LambdaTest Capabilities Generator) для двух тестовых сценариев.
Тест — 1
saf_capabilities = {
"build" : "Porting test to LambdaTest Selenium Grid (Safari)",
"name" : "Porting test to LambdaTest Selenium Grid (Safari)",
"platform" : "MacOS Big sur",
"browserName" : "Safari",
"version" : "14.0"
}
Тест — 2
ch_capabilities = {
"build" : "Porting test to LambdaTest Selenium Grid (Firefox)",
"name" : "Porting test to LambdaTest Selenium Grid (Firefox)",
"platform" : "Windows 10",
"browserName" : "Chrome",
"version" : "92.0"
}
Вместо локальной Selenium Grid, тесты выполняются на облачной Selenium Grid на LambdaTest. Поэтому для доступа к удаленной Selenium Grid (т.е. @hub.lambdatest.com/wd/hub) используется комбинация имени пользователя и ключа доступа (доступны в разделе профиля).
API RemoteWebDriver использует удаленный URL и возможности браузера, созданные с помощью генератора возможностей.
Тест — 1
ff_driver = webdriver.Remote(command_executor = remote_url, desired_capabilities = saf_capabilities)
Тест — 2
chrome_driver = webdriver.Remote(command_executor = remote_url, desired_capabilities = ch_capabilities)
Остальная часть реализации остается без изменений. Вот и все в этом учебнике по Selenium Python, мы готовы к параллельному выполнению на облачной Selenium Grid.
Выполнение
Выполните следующую команду в терминале для параллельного выполнения тестов Selenium Python на LambdaTest Grid.
pytest -s tests/test_lambdatest*.py --verbose -n=2
Чтобы проверить статус выполнения, посетите Automation Dashboard на LambdaTest. Как видно ниже, два теста выполняются параллельно на облачной Selenium Grid. Поскольку мой текущий план поддерживает пять параллельных сессий, я мог бы запустить пять параллельных тестов (при необходимости).
Как видно ниже, оба Selenium-теста на Python были успешно выполнены на LambdaTest Grid.
Завершение
Python — один из широко используемых языков, и с каждым годом он становится все популярнее. Хотя PyUnit является фреймворком автоматизации тестирования по умолчанию, большинство пользователей предпочитают фреймворк PyTest для выполнения автоматизированного тестирования на Python.
Кроме того, с помощью плагина pytest-xdist относительно легко запускать Selenium Python тесты параллельно. В этом исчерпывающем руководстве по Selenium Python мы подробно рассмотрели все аспекты выполнения кроссбраузерных тестов с помощью Selenium на Python.
Потенциал Python и Selenium может быть по-настоящему использован при выполнении автоматизированного тестирования на Python в облачной Selenium Grid (например, LambdaTest). Кроме того, такой подход помогает улучшить качество продукта за счет увеличения общего охвата браузера.
Надеюсь, вы найдете это подробное руководство по Selenium Python полезным! Также оставляйте свои комментарии о распространенных проблемах, с которыми вы обычно сталкиваетесь при автоматизированном тестировании Selenium!
Счастливого тестирования ?