[Перевод] Selenium: для любителей яблок |
Привет! Это моя новая статья, посвященная Selenium. Ранее я уже подробно рассказал об организации масштабируемого кластера Selenium (часть I, часть II). Затем мы рассмотрели вопрос использования Selenium в качестве инструмента отладки автотестов (раз, два), Наконец, нам удалось создать порядок из хаоса на Windows (ссылка). Сегодня мы будем иметь дело с яблоками, точнее с одним большим Яблоком (т.е. с Apple).
Хотя Selenium является относительно простым инструментом, жизнь усложняется, когда мы пытаемся запускать автоматические тесты в браузерах из Купертино: Safari под MacOS и мобильный Safari под iOS. Чтобы полностью разобраться с браузерами для настольных операционных систем, давайте сегодня поговорим о Safari под MacOS. Сегодня свежие версии Safari разрабатываются только под MacOS. Исторически работа с Safari была реализована в Selenium при помощи браузерного расширения, которое транслировало команды Selenium во внутренние команды браузера. Изначально расширение загружалось в Safari автоматически. Позже из-за изменения правил безопасности в Safari нужно было установить расширение один раз вручную. Наконец, с выходом Safari X все значительно поменялось. Теперь Safari использует отдельно стоящий процесс веб-драйвера — safaridriver
, аналогично chromedriver
у Chrome и geckodriver
у Firefox. Чтобы запустить тесты в Safari нужно:
safaridriver
(обычно устанавливаемый вместе с Safari и расположенный в /usr/bin/safaridriver
) на свободном порту, например, 4444. Команда для запуска будет такая:$ /usr/bin/safaridriver --port 4444
http://localhost:4444/
Звучит легко, не правда ли? И так оно и есть! Тем не менее есть проблема — safaridriver
умеет работать только с одной копией Safari параллельно. Как преодолеть это ограничение? — Запустить драйвер несколько раз на разных портах и запустить тесты на разных URL с этими портами. Просто, но требует много ручной работы. Давайте автоматизируем этот процесс! Как это могло бы работать? А вот как:
safaridriver
.safaridriver
на этом порту и проксирует все последующие запросы туда же.safaridriver
также останавливается.Описанный алгоритм очень прост, поэтому он не должен требовать разработки сложного сервера, не так ли? Если вы возьмете в качестве сервера сегодняший стандарт — Selenium сервер, то будете использовать чересчур сложный инструмент для такой просто задачи. Почему это так:
Короче говоря, позвольте мне показать вам более подходящий инструмент — Selenoid. Selenoid — это легковесный демон, созданный полностью заменить тучный Selenium сервер. Завести Selenoid с Safari очень просто:
~/browsers.json
):{
"safari": {
"default": "latest",
"versions": {
"latest": {
"image": ["/usr/bin/safaridriver"]
}
}
}
}
$ curl -Lo ~/selenoid \
https://github.com/aerokube/selenoid/releases/download/1.3.3/selenoid_darwin_amd64
$ chmod +x ~/selenoid
$ ~/selenoid -conf ~/browsers.json -disable-docker
http://localhost:4444/wd/hub
Больше не нужно устанавливать Java и компанию! Но если вы, как я, не хотите делать руками и это, то можете получить аналогичный результат, используя однострочный скрипт:
$ curl -Lo ~/cm https://github.com/aerokube/cm/releases/download/1.2.1/cm_darwin_amd64 && \
chmod +x ~/cm && \
~/cm selenoid start --browsers safari
При желании вы также можете скачать и запустить легковесный UI для Selenoid. Подробнее об этом можно почитать в документации.
Простое Selenium тестирование в Safari никогда не было так близко. Хорошего дня!
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |