Алексей Сундуков: Ускориться удалось до уровня PhantomJS 1.9.8. Получается так, что в среднем он работает быстрее, чем ChromeDriver. То есть нельзя сказать, что каждый тест проходит быстрее, но на длинной дистанции выигрыш во времени есть и, само собой, чем больше у вас тестов, тем ощутимее он будет.
В нашем проекте нам пока не удалось полностью перейти на какой-то из драйверов. Временным решением стали атрибуты, которым помечаются тесты. Например, если тест время от времени падает на PhantomJS, но стабильно проходит на ChromeDriver, то тест помечается и гоняется только на хроме. В принципе такой шаг помог держать много тестов в стабильном состоянии.
Плюс ко всему мы используем не дефолтный билд PhantomJS, а свою версию, которую собрали с небольшими правками. Например, полечили загрузку файлов и добавили в пару мест более подробное логирование ошибок.
Я бы для начала поискал способ обработать контент сайта до формирования DOM дерева или хотя бы до того, как за него возьмутся скрипты этого сайта. Если расширение под хром, то посмотрите на поле "run_at" в "content_scripts".
Спасибо. Но Александр Хиренко правильно сказал, что даже проверка не дает гарантий, что все будет работать так как вы ожидаете. Допустим, вы пишете новый метод, который не входит в стандарт. Добавили проверку на существование и в итоге получилось, что такой метод уже есть, то это проблема, пусть и не падает никакой ошибки. Получается, вам нужно заранее знать, что такой метод есть и использовать его или назвать свой по-другому, ведь иначе нет смысла заново писать его реализацию.
В случае полифилов такая проверка оправдана, но тут опять же нужно быть внимательным и не написать полифил для других браузеров таким, что он будет отличаться от нативной реализации в нормальных.
Александр Хиренко: Тогда это проблема всего JS'a как языка с динамической неявной типизацией ) Я тоже был новичком в большом проекте и во многих местах даже не пытался понять что происходит просто читая код. Консоль, брейкпойнт, только так можно было разобраться.
Насчет первого согласен, нужно быть внимательным. Насчет второго: это не очень большая проблема. Точнее, не самая большая, с которой придется столкнуться новому разработчику, потому что обычно такие экстеншены прописаны или в одном в файлы или хотя бы лежат рядом и можно уделить минут 5, пробежать их глазами и понять, что "если вижу непонятный метод на массиве — смотреть сюда". К тому же, если названия методов будут довольно говорящими или позаимствованы из других языков, то разобраться будет еще проще. Но в принципе ваша точка зрения понятна, спасибо.