Тестируемое веб-приложение использует взаимную аутентификацию;сертификаты сервера и клиента используются для доступа к нему.Чтобы автоматизировать тестирование для разных пользователей, я вручную создал несколько профилей Firefox;каждый профиль для конкретного пользователя, который будет автоматически выбирать и использовать сертификат пользователя при переходе на веб-сайт приложения.
Для тестирования автоматизации Protractor я пытаюсь запустить тест со ссылкой на существующий каталог профилей Firefox для тестового пользователя, но в моей реализации этого не происходит;Firefox не содержит закладок профиля пользователя (не отображаются) и при переходе на веб-сайт приложения не может войти в систему из-за отсутствия сертификатов пользователя / сервера.
Информация о версии
- узел: '8.12.0 ',
- npm:' 6.4.1 ',
- Транспортир 5.4.1
- доступна отдельная версия селена: 3.14.0 [последняя]
- webdriver-manager 12.1.0
- Доступные версии chromedriver: 2.42, 2.43 [последний]
- Доступные версии geckodriver: v0.22.0, v0.23.0 [последний]
- Несколько версий Firefox, установленных в независимых каталогах
- Firefox 62.0.3 (целевая версия, пытающаяся запустить)
- Firefox 52.8.0 ESR
- Firefox Dev Edition 64.0b3
protractor-ff1.conf.js
Этот файл conf.js приводит к тому, что профиль Firefox используется должным образом, но затем веб-драйвер теряет соединение сбраузер, поэтому тест не запускается;это означает, что браузер не переходит на baseUrl.Удаление аргументов профиля из moz: firefoxOptions приводит к автоматизации перехода к baseUrl, но тогда профиль Firefox не используется, и поэтому автоматизация не может получить доступ к приложению (не установлены сертификаты сервера / пользователя).
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
SELENIUM_PROMISE_MANAGER: false, // using async-await in spec's and POM files
allScriptsTimeout: 11000,
specs: ['./e2e/**/*.e2e-spec.ts'],
directConnect: true,
baseUrl: 'https://localhost/',
capabilities: {
browserName: 'firefox',
marionette: true,
'moz:firefoxOptions': {
binary: 'path/to/firefox.exe',
'args': ['-profile', 'path/to/Profiles/q9302rdm.FF59default']
}
},
РЕЗУЛЬТАТ
PS C:\Users\user1\Documents\myproject> protractor .\protractor-ff1.conf.js --troubleshoot --logLevel DEBUG --stackTrace
[11:32:29] D/launcher - Running with --troubleshoot
[11:32:29] D/launcher - Protractor version: 5.4.1
[11:32:29] D/launcher - Your base url for tests is https://localhost/
beforeLaunch
[11:32:29] I/launcher - Running 1 instances of WebDriver
[11:32:29] I/direct - Using FirefoxDriver directly...
[11:33:30] E/runner - Unable to start a WebDriver session.
[11:33:30] E/launcher - Error: WebDriverError: connection refused
at Object.throwDecodedError (C:\Users\user1\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:514:15)
at parseHttpResponse (C:\Users\user1\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:519:13)
at doSend.then.response (C:\Users\user1\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:441:30)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:189:7)
[11:33:30] E/launcher - Process exited with error code 100
protractor-ff2.conf.js
Этот код немного беспорядочный, но пытался выполнить несколько итераций.Этот файл conf.js приводит к автоматической навигации по baseUrl, но не использует профиль Firefox, поэтому не может получить доступ к приложению.Я попробовал несколько вариантов кода из примера и просматривал документацию «selenium-webdriver / firefox».Я полагаю, что я использую API неправильно, но я не уверен, как я или как я мог бы это исправить.
const { SpecReporter } = require('jasmine-spec-reporter');
var FirefoxProfile = require('selenium-webdriver/firefox').Profile;
var FirefoxOptions = require('selenium-webdriver/firefox').Options;
var q = require('q');
var makeFirefoxProfile = function (preferenceMap) {
SELENIUM_PROMISE_MANAGER: false, // using async-await in spec's and POM files
var profile = new FirefoxProfile();
var options = new FirefoxOptions();
options.setProfile('C:/Users/user1/AppData/Roaming/Mozilla/Firefox/Profiles/q9302rdm.FF59default');
profile.acceptUntrustedCerts(true);
for (var key in preferenceMap) {
profile.setPreference(key, preferenceMap[key]);
}
return q.resolve({
browserName: 'firefox',
marionette: true,
firefox_profile: profile
});
};
exports.config = {
SELENIUM_PROMISE_MANAGER: false, // using async-await in spec's and POM files
allScriptsTimeout: 11000,
specs: ['./e2e/**/*.e2e-spec.ts'],
directConnect: true,
baseUrl: 'https://localhost/',
getMultiCapabilities: function () {
return q.all([
makeFirefoxProfile({
// preferences from about:config
'browser.startup.homepage': 'https://www.google.com'
}),
]);
},
Пример Ссылка, но все еще не включена успешно.Это был постоянный поиск в моем поиске, но я не понимаю, где бы я ссылался на существующий профиль.Кроме того, похоже, сегодня лучше использовать selenium-webdriver / firefox вместо модуля firefox-profile.
Справочная информация Я давно изучаю и пытаюсь решить эту проблему самостоятельно и до сих пор не знаюу меня нет полного «рабочего» примера.Я понимаю, что это, вероятно, простая проблема, но любые рекомендуемые статьи или, желательно, рабочий пример будут золотыми!Пожалуйста, нужна помощь в этом!
У меня есть образование в области разработки программного обеспечения, но я больше новичок в программировании.