#angularjs #protractor
#angularjs #транспортир
Вопрос:
Я использую транспортир для автоматизации некоторых довольно трудоемких задач на тяжелом сайте angular, загрузка которого занимает около 15 секунд.
Я хотел бы посмотреть, есть ли способ сохранить экземпляр Chrome открытым (и загруженную страницу) между различными тестами, чтобы избежать новой загрузки каждый раз.
Комментарии:
1. Если это тесты для одного и того же приложения / веб-сайта, почему они разделены?
2. Потому что они зависят от внешних событий, которые не происходят с фиксированными интервалами. т.е. происходит внешнее событие, и затем я автоматизирую действие на веб-сайте. Хотите избежать необходимости каждый раз ждать медленной загрузки.
Ответ №1:
Транспортир — хороший инструмент, поэтому он выполняет надлежащую очистку после себя. Т.Е. Он завершает работу браузера, если он его запустил.
Итак, чтобы поддерживать работу ваших браузеров между сеансами и сэкономить 5-15 секунд, вы можете попросить Protractor подключиться к сеансу браузера вместо создания нового сеанса браузера.
Это можно сделать с помощью объекта config или через командную строку.
<!-- language: typescript -->
/** in your protractor.conf.js or similar config object*/
directConnect: undefined, // can be omitted, but just to show that directConnnect must not be set
seleniumAddress: 'http://localhost:4444/wd/hub',
seleniumSessionId: '<your session id - 32 char hex code>',
Однако запустить экземпляр браузера или найти экземпляр браузера непросто. Это можно сделать с помощью автономной консоли Selenium, доступной по адресу http://localhost:4444/wd/hub , предполагая, что у вас запущен selenium.
Более подробную информацию см. в пакете Webdriver-Reuse-Session NPM.
Ответ №2:
Можете ли вы с уверенностью сказать, что эти события не будут происходить одновременно? Если они это сделают, результаты вашего теста будут противоречивыми. Причина, по которой Protractor каждый раз открывает новое окно браузера, заключается в том, чтобы каждый раз предоставлять вам чистый старт. Это гарантирует, что ваши тесты будут выполняться одинаково каждый раз.
Теперь, что касается решения:
В вашем conf.js
файле вы указываете браузер для использования (в вашем случае Google Chrome). Вероятно, это выглядит примерно так :
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['myspec.js'],
capabilities: {
browserName: 'chrome'
}
};
Как описано здесь, вы можете добавить к своим возможностям параметры, специфичные для Chrome, такие как show-fps-counter
, --start-maximized
и --user-data-dir
. Полный список аргументов можно найти здесь . (Это длинный)
Что вам нужно будет добавить, так это:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': ['--user-data-dir=/your/path/of/choice']
}
}
Ваш путь выбора в Windows может быть --user-data-dir=c:foo
, например.
В ОС на базе unix --user-data-dir=/usr/foo
--user-data-dir
Флаг заставит Chrome сохранять пользовательские данные (файлы cookie, кэшированные данные, историю и закладки). Вот документы для этого.
Это не оставит сеанс браузера открытым (что в любом случае не идеально), но это должно значительно повысить вашу производительность, поскольку будет использовать кэшированные данные, оставленные предыдущими тестовыми запусками.
Не пугайтесь, если первый тест все еще выполняется медленно, в первом тесте еще ничего не будет кэшировано :).
Комментарии:
1. Спасибо, Том, ты прав, хранение пользовательских данных действительно сильно влияет на скорость, а также позволяет избежать необходимости каждый раз входить в систему, что имеет значение в моих тестах. Я уже реализовал это и надеялся также оставить окно открытым :). Есть еще идеи?