Возможно ли повторно использовать экземпляр Chrome между независимыми тестами транспортира?

#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. Спасибо, Том, ты прав, хранение пользовательских данных действительно сильно влияет на скорость, а также позволяет избежать необходимости каждый раз входить в систему, что имеет значение в моих тестах. Я уже реализовал это и надеялся также оставить окно открытым :). Есть еще идеи?