Как запустить UI-автотесты в любом Chromium-браузере

от автора

Привет, Хабр! Меня зовут Кристина Курашова и я отвечаю за качество в VK Assistant. Это платформа по созданию диалогового ассистента с использованием NLP-моделей. Его можно интегрировать с любой корпоративной системой (как SAP и CRM, например) и подключить к корпоративному мессенджеру или даже web-приложению с возможностью голосового управления. 

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

Некоторое время назад я приступила к автоматизации ее регрессионного тестирования. ​​И вот февраль 2022 принес в нашу команду новые вызовы. Один из них — запуск этих тестов также в Atom Browser и Yandex Browser. Ок, запускаем.

Внимание! Эта статья будет полезна тем, кто, как и я, столкнулся с задачей запуска UI-автотестов в том числе в браузерах на основе Chromium (не только Chrome). Пройдя этот путь, решила поделиться с вами. Возможно, кому-то это поможет сэкономить время.

Для UI-автотестов мы используем Nightwatch.js без Selenuim-сервера. Nightwatch.js — это фреймворк для автоматизации end-to-end тестирования на Node.js. Один из плюсов этого фреймворка, на мой взгляд, очень подробная документация. Про Selenium-сервер можно почитать здесь. Вкратце, он помогает запускать автотесты параллельно с использованием нескольких машин (реальных или виртуальных). Пока для нас скорость выполнения тестов не так важна, мы отложили его в сторону, и вот так выглядит наша текущая схема:

Источник https://nightwatchjs.org/
Источник https://nightwatchjs.org/

То есть для запуска достаточно установленных на машине Node.js, Nightwatch.js и драйвера, который будет выполнять команды теста. Под каждый браузер потребуется свой драйвер. Об этом расскажу далее.

Схема с использованием Selenium-сервера будет выглядеть так:

Источник https://nightwatchjs.org/
Источник https://nightwatchjs.org/

На месте Nightwatch.js может быть любой другой фреймворк. Независимо от использования Selenium-сервера для запуска понадобится драйвер конкретного браузера. 

В этой статье речь идет о запуске именно в Chromium-браузерах.

Спойлер

Схема одинаковая. Отличается только драйвер, который будем подкладывать ? Но обо всем по порядку.

Когда составили список интересующих нас браузеров, надо понять, какая версия драйвера понадобится для каждого из них. Версию для Chromium-браузеров посмотреть можно так: chrome://version. Выглядит это следующий образом, например:

В Atom.
В Atom.
В Microsoft Edge.
В Microsoft Edge.

А далее самое интересное ? Найти драйвер под каждый браузер — тот еще квест. Но вполне посильный для каждого джедая тестировщика. Слегка упрощу задачу:

Конечно, есть и другие Chromium-браузеры, делитесь ссылками в комментариях.

Итак, скачиваем драйвер под нужную версию, распаковываем, запоминаем путь до exe-файла (я положила в /usr/local/bin для удобства). На macOS, возможно, после распаковки еще потребуется сделать файл исполняемым. Для этого в консоли выполним:

chmod +x msedgedrive

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

Далее идем в конфиги фреймворка. Они обычно лежат в корне проекта. Мой называется nightwatch.conf.js. И там нас интересуют настройки окружения test_settings. Здесь задаются настройки окружения, в том числе для каждого браузера. Можно добавлять туда сколько угодно вариантов окружений с учетом ограничений среды (Safari будет бегать только на macOS, Atom — пока только на Windows, и т.д.). Вот так, например, будет выглядеть блок с настройками под Microsoft Edge в Linux-среде (в том числе на macOS):

   edge: {      desiredCapabilities: {        browserName: 'MicrosoftEdge',        'ms:edgeOptions': {          w3c: true,          // More info on EdgeDriver: https://docs.microsoft.com/en-us/microsoft-edge/webdriver-chromium/capabilities-edge-options          args: [            //'--headless'          ]        }      },        webdriver: {        start_process: true,        // Download msedgedriver from https://docs.microsoft.com/en-us/microsoft-edge/webdriver-chromium/        //  and set the location below:        server_path: '/usr/local/bin/msedgedriver',        cli_args: [          // --verbose        ]      }    }

Вот тут самое интересное:

desiredCapabilities.browserName=chrome будет актуально для всех Chromium-браузеров. 

webdriver.server_path — это непосредственно путь до драйвера, исполняемого файла, который мы скачали и распаковали до этого.

Важно! В Linux-системах пусть указываем вплоть до файла, без расширения.

Для запуска в среде Windows понадобится немного больше извращения. Обратите внимание на путь до драйвера (двойные обратные слеши). И расширение для драйвера в данном случае указываем.

   atom: {       desiredCapabilities: {         browserName: 'chrome',         'goog:chromeOptions': {           // More info on Chromedriver: https://sites.google.com/a/chromium.org/chromedriver/           //           // w3c:false tells Chromedriver to run using the legacy JSONWire protocol (not required in Chrome 78)           w3c: true,           args: [             //'--no-sandbox',             //'--ignore-certificate-errors',             //'--allow-insecure-localhost',             //'--headless'           ]         }       },         webdriver: {         start_process: true,         server_path: 'C:\\Users\\username\\AppData\\Local\\Mail.Ru\\Atom\\Application\\chromedriver_18.0.0.660_x64.exe',         cli_args: [           // --verbose         ]       }     },

Вот, собственно, и всё. Погнали! В Nightwatch.js команда запуска выглядит так:

nightwatch -g login -e atom

где -e atom — окружение, в котором запускаем, от слова environment (в данном случае Atom Browser). Это название нашего энва из test_settings, которое мы задали ранее.

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

Основное ограничение: по такой схеме не получится запускать тесты параллельно на одной машине (если речь не идет про использование Selenium-сервера). То есть только последовательно можно будет запускать. Это касается лишь Chromium-браузеров, потому что они используют один движок.

Распространенная ошибка, с которой можно столкнуться: автотесты не запускаются, и при этом в консоли пусто — никаких ошибок. Обратите внимание на путь до исполняемого файла и сам файл. Он исполняемый? Путь указан правильно? Прав у системы на запуск драйвера достаточно?

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

Тут надо будет подогнать либо драйвер под браузер, либо браузер под драйвер. Обычно первое проще ?

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


ссылка на оригинал статьи https://habr.com/ru/company/vk/blog/683992/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *