Можно ли добавить плагин в chromedriver под тест транспортира?

Я пытался справиться с базовой аутентификацией во время моего теста транспортира. С этим возникли трудности, поэтому я нашел плагин для Chrome, который автоматически отправляет мои учетные данные для веб-сайтов, требующих базовой аутентификации.

Поскольку каждый раз, когда выполняется этот хромированный драйвер, загружается новый профиль, как я могу постоянно добавлять плагин в свои тесты? Я знаю, что есть https://sites.google.com/a/chromium.org/chromedriver/extensions, но я не думаю, что это очень понятно.


person andrepm    schedule 03.12.2014    source источник


Ответы (3)


Вам необходимо настроить список extensions внутри chromeOptions:

capabilities {
    'browserName': 'chrome',
    'chromeOptions': {
        'extensions': ['base64 encoded extension']
    }
}

Обратите внимание, что в extensions важно предоставить список упакованных расширений Chrome в кодировке base-64.

Чтобы получить расширение в кодировке base64, необходимо прочитать файл расширения .ctx и закодировать содержимое с помощью base64. Например, используя питон:

>>> import base64
>>> data = open('path_to_the_ctx_extension').read()
>>> base64.standard_b64encode(data).decode('UTF-8')
# outputs the encoded chrome extension which you can paste in the config

Или, проще, создайте файл helper.js, используя fs и q:

var q = require('q');
var fs = require('fs');

exports.getCapabilities = function (filename) {
    var deferred = q.defer();

    fs.readFile(filename, function (err, data) {
        var capabilities = {
            'browserName': 'chrome',
            'chromeOptions': {
                extensions: [
                    data.toString('base64')
                ]
            }
        };
        deferred.resolve(capabilities);
    });

    return deferred.promise;
};

Затем в конфигурации транспортира используйте эту функцию getCapabilities(), чтобы получить возможности:

var helper = require('./helper.js');

exports.config = {

    capabilities: helper.getCapabilities('/path/to/crx/extension'),

    ...
}

В настоящее время он работает с одним расширением, поэтому есть возможности для улучшения.

Кроме того, просмотрите следующий вопрос, если у вас есть проблемы:

person alecxe    schedule 03.12.2014
comment
Спасибо, это было очень полезно! Но у меня проблема с этим решением. Когда я устанавливаю путь к желаемому .crx и запускаю тест, он терпит неудачу, и сообщение об ошибке не отображается. Только 1_. Я также прочитал тему, которую вы мне предложили, но не нашел решения для моего случая. - person andrepm; 03.12.2014
comment
Он не предоставляет трассировку стека. Это почти все: "C:\Program Files (x86)\JetBrains\WebStorm 9.0.1\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" node_modules\protractor\lib\cli.js C:\Users\QARJ\WebstormProjects\ProtractorPiloto\config.js Starting selenium standalone server... Selenium standalone server started at http://192.168.44.130:61384/wd/hub Process finished with exit code 100 - person andrepm; 03.12.2014
comment
@andrepm, а что, если опустить extensions? Это работает? Спасибо. - person alecxe; 03.12.2014
comment
Да, я пытался прокомментировать extensions и сам путь расширения. В обоих случаях мой тест проходит нормально. - person andrepm; 03.12.2014
comment
@andrepm интересно, не могли бы вы дать название расширения? попробую воспроизвести проблему. Спасибо. - person alecxe; 03.12.2014
comment
@alecxe Я пробовал; получая эту ошибку в консоли [14:34:20] E/launcher - Error: TypeError: Target browser must be a string, but is <undefined>; did you forget to call forBrowser()? at TypeError (native) - person Prashanth Sams; 21.09.2016
comment
Итак, как только вы добавите расширение в chrome options. Как вы взаимодействуете с расширением? - person Monnie_tester; 12.03.2019

Проверьте это: https://github.com/andresdominguez/elementor/blob/master/bin/elementexplorer.js#L194

Здесь я загружаю расширение из локального каталога. Расширение представляет собой не файл crx, а несжатую версию.

'chromeOptions': {
  'args': ['--load-extension=' + extensionPath]
}
person Andres D    schedule 03.12.2014
comment
Это не сработало для меня. Это как это? 'chromeOptions': { 'args': ['--load-extension=' + 'C:/Users/QARJ/AppData/Local/Google/Chrome/User Data/Default/Extensions/dgpgkkfheijbcgjklcbnokoleebmeokn/1.1_0'] } - person andrepm; 04.12.2014
comment
Возможно, у вас проблемы с пробелом в пользовательских данных. Можете ли вы скопировать расширение в C:/tmp для проверки? - person Andres D; 04.12.2014
comment
Я рад это слышать. Удачного тестирования! Кроме того, проверьте мой инструмент elementor: npmjs.org/package/elementor Мне нужны отзывы - person Andres D; 04.12.2014
comment
Привет @andrepm, так это рабочее решение? Из любопытства, почему другой ответ помечен как принятый ответ? - person Leo Gallucci; 22.12.2014
comment
Привет, оба решения работают. Другой отмечен только потому, что он был первым. - person andrepm; 24.12.2014
comment
@AndresD Столкнулся с проблемами; не могли бы вы посмотреть здесь. Спасибо! stackoverflow.com/ вопросы/39605385/ - person Prashanth Sams; 21.09.2016
comment
Можно ли включить более одного расширения с помощью этого метода? - person zero_cool; 27.04.2019

Вместо того, чтобы фиксировать расширение с вашим кодом и загружать его с диска при запуске тестов, вы можете рассмотреть возможность использования authenticator-browser-extension Модуль узла, который я недавно открыл.

Чтобы использовать модуль, установите его из npm:

npm install --save-dev authenticator-browser-extension

И импортируйте в protractor.conf.js:

const { Authenticator } = require('authenticator-browser-extension');

exports.config = {
    capabilities: {
        browserName: 'chrome',

        chromeOptions: {
            extensions: [
                Authenticator.for('username', 'password').asBase64()
            ]
        }
    },
}

Совет для профессионалов: помните, что не следует передавать свои учетные данные вместе с кодом, вместо этого рассмотрите возможность использования переменных env.

Надеюсь это поможет!

Ян

person Jan Molak    schedule 19.03.2019
comment
Похоже, это должно быть принятым решением в 2019 году. Спасибо! - person AsGoodAsItGets; 02.12.2019
comment
Спасибо, я рада, что это полезно! - person Jan Molak; 02.12.2019
comment
Это отлично работает с хромом. Но не работает с безголовым хромом. Вы знаете какую-нибудь альтернативу? - person Prakash Vishwakarma; 21.05.2020
comment
Безголовый Chrome не поддерживает расширения npmjs.com/package/ , поэтому вам может понадобиться использовать прокси-сервер BrowserMob — github.com/lightbody/browsermob-proxy - person Jan Molak; 21.05.2020