Реализация запуска автотестов в браузере «Спутник».

Стартовой точкой являлся подбор фреймворка, который в теории мог бы поддерживать Спутник, но поиски не увенчались успехом: из коробки ни один из ныне популярных фреймворков автоматического тестирования не дружит со Спутником, поэтому берём один из хорошо нам знакомых (Codeception, с последующим переходом на CodeceptJS) и ищем окольные пути заставить автотесты выполняться в Спутнике. Что нам известно: Спутник реализован на основе ядра Chromium — т.е. на том же самом ядре, что и Google Chrome, соответственно, есть большая вероятность запустить автотесты в Спутнике при имитировании браузера Chrome, т.к. совпадают основные начинки Chrome и Спутника. Скачиваем chromedriver, в конфиге фреймворка прописываем исполнение автотестов в Chrome, однако указываем кастомный путь к браузеру, который ведёт до экзешника Спутника.

Запускаем автотесты — видим ошибку, связанную с неподдерживаемой версией Chrome. Обернуть Спутник в фантик от Chrome было недостаточным: привередливый клиент учуял подставу. Раз уж не хватило внешней обёртки, чуть изменим внутренности — подумал ваш покорный слуга, но этот путь оказался провальным. Добившись полного совпадения значений атрибутов, зашитых в экзешнике, сталкиваемся с тем, что Спутник теперь в принципе отказывается исполняться в виду его внутриличностных конфликтов: себя он ощущает как Спутник, но ему вбивают в голову, что он Chrome, чему он был не особо рад и отказывался от дальнейшего сотрудничества.

Возвращаемся на шаг назад. Нужно каким-либо образом добавить текущую версию Спутника в список поддерживаемых. Для начала, определяем софт, который возвращает нам данную ошибку — находим ответ в исходниках chromedriver. Выкачиваем с репозитория исходники, находим метод, отвечающий за проверку версий браузера, делаем сиюминутную правку и... теперь нам осталось скомпилировать наш хакнутый chromedriver, что займёт чуть больше времени (плюс пару троек часов), чем применение фикса. Вкратце о требуемом софте для компиляции: visual studio (С++, wdk+sdk+mfc+atl), depot_tools, perl, python2+pywin32. При установке софта нужно проследить за отсутствием конфликтов: например, дублирующийся sdk может неочевидно блочить установку wdk. Через гугловский компилятор ninja даём начало создания нашего франкенштейна и... при компиляции сталкиваемся с ошибками, относящимися ко внутренностям софта со стороны Microsoft: Windows Kits, v10.0.17134.0. По логу ошибки, находим запрашиваемый неопределённый объект, убираем излишние запрашивания, ещё раз с нуля (!обязательно очищаем output-папку перед компиляцией) компилируем исходники chromedriver и получаем на выходе наше детище.

Сначала пробуем запустить на обновлённом chromedriver автотесты в Chrome (да, в самом настоящем Chrome), если попытка запуска успешна, то запускаем в Спутнике (да, в нашем подделанном Chrome) — и наконец-то наблюдаем успех [к нему прилагается буря эмоций широкого спектра]. Добавлю, что придётся смириться с отсутствием поддержки свойства window_size со стороны Chromium, в отличие от доработанного Chrome. Для управления шириной/высотой браузера Спутник, ограничимся использованием флажка применения полноэкранного режима приложения.
Александр Коптяев QA