Дисклеймер
Хочу поделиться опытом использования одного из немногих удобных Selenium wrapper на #python3 (pytest) - pyleniumio. В этой статье описан пример использования, сравнение с Selenium на python, как запустить тесты через Docker HUB ( так же как и на обычном selenium + python ).
И да - на сайте вы можете найти почти идентичный материал с тем как все запустить и сконфигурировать. Но если вас заинтересовала статья, то (надеюсь) и по моему туториалу вы тоже сможете попробовать этот враппер.
pyleniumio
Как было сказано несколько раз выше - это wrapper (обертка вокруг) всем нам хорошо знакомого Selenium. И как результат - мы имеем возможность использовать одновременно стандартные методы Selenium + немного кастомизированные pyleniumio.
py.visit('https://google.com.ua')
py.webdriver.find_element_by_class_name()
Python выделяется на фоне конкурентов - своей лаконичностью, #pyleniumio пошел еще дальше - и еще немного уменьшил количество необходимого кода для запуска тестов.
Установка и запуска
Начинаем с создания virtualenv
. Сам #pyleniumio должен устанавливаться легко через менеджер пакетов python. На сайте описан метод, который у меня не сработал, как ожидалось, через команду:
pip install pyleniumio
и результатом выполнения должны создаваться несколько файлов - conftest.py
+ pyleniumio.json
- и они у меня не появились, руками создавать нет смысла ( так как они должны создаваться с набором фиксутр для pytest
)
Я попробовал метод описанный в видео через команду и все получилось:
pipenv install pyleniumio
Пишем тест
Создаем тест и в него сразу передает fixture py
Это одна из автоматически созданных fixture
которые можно найти в файле conftest.py
Fixture - Py который мы передаем в тест, это стандартная реализация driver - которую нужно было писать руками, а в #pyleniumio она идет из коробки, мелочь? да, но приятно
@pytest.fixture(scope='function')
def py(test_case, py_config, request):
""" Initialize a Pylenium driver for each test.
Pass in this `py` fixture into the test function.
Examples:
def test_go_to_google(py):
py.visit('https://google.com')
assert 'Google' in py.title
"""
py = Pylenium(py_config, test_case.logger)
yield py
if request.node.rep_call.failed:
# if the test failed, execute code in this block
if py_config.logging.screenshots_on:
py.screenshot(f'{test_case.file_path}/test_failed.png')
py.quit()
Самый простенький тест будет выглядеть как и обычный простенький тест на pytest
from selenium.webdriver.common.keys import Keys
def test_new_wrapper(py):
py.visit('https://automated-testing.info')
py.get('#search-button > svg').click()
py.get('#search-term').type('pyleniumio', Keys.ENTER)
assert py.get('div.fps-result > div.fps-topic > div.topic').contains('pyleniumio')
Что сразу заметно - экран максимального размера, не нужно дописывать
driver.maximize_window()
мелочь, но приятно.
В целом очень много кастомных методов которые быстро работают. Можно дописать свои, поддерживаются (как я уже писал) стандартные методы Selenium, это значит что на #pyleniumio можно легко мигрировать.
Docker
И напоследок пример того как запускать тесты в контейнере и как легко работает параллелизация. - и тут будет без новизны, если вы запускали все это на pytest то все будет работать так же.
Добавляем в файл pylenium.json
:
{
"driver": {
"version": "latest",
"remote_url": "http://localhost:4444/wd/hub"
}
}
Создаем docker-compose.yaml
version: "3"
services:
selenium-hub:
image: selenium/hub
ports:
- "4444:4444"
environment:
GRID_MAX_SESSION: 16
GRID_BROWSER_TIMEOUT: 300
GRID_TIMEOUT: 300
chrome:
image: selenium/node-chrome
depends_on:
- selenium-hub
environment:
HUB_PORT_4444_TCP_ADDR: selenium-hub
HUB_PORT_4444_TCP_PORT: 4444
NODE_MAX_SESSION: 2
NODE_MAX_INSTANCES: 2
firefox:
image: selenium/node-firefox
depends_on:
- selenium-hub
environment:
HUB_PORT_4444_TCP_ADDR: selenium-hub
HUB_PORT_4444_TCP_PORT: 4444
NODE_MAX_SESSION: 4
NODE_MAX_INSTANCES: 4
Запуск контейнера:
docker-compose up -d
И запуск тестов py.test -v ...
Методы
Весь список реализованных методов - лучше всего смотреть на сайте.
Из того что мне понравилось - это фикстура - fake
, в своих тестах использовал.
execute_script
- раньше писал этот метод сам)
drag_to_element
и много других
Выводы
Легкий в настройке, простой и интуитивно понятный в использовании врапер.
Глобально ничего нового, все кто использую Selenium - привыкли максимально кастомизировать под свои требования, добавляют свои фикстуры и методы и в этом нет ничего сложно и плохого, но как приятно с коробки получать больше. И при этом всем - ты все еще так же можешь кастомизировать
Я бы рекомендовал всем попробовать #pyleniumio. И планирую даже попробовать мигрировать на одном из своих проектов на него.
Думаю что все минусы всплываюь в активном использовании, но то что я уже увидел - подкупает.
P.S. Для #java есть аналог jalenium
Есть желание попробовать pyleniumio?
- Да
- Нет
0 участников