Възможно ли е да добавите плъгин към chromedriver при тест на транспортир?

Опитвах се да се справя с основното удостоверяване по време на моя тест с транспортир. Доста трудности, така че намерих приставка за chrome, която изпраща автоматично моите идентификационни данни за уебсайтове, които изискват основно удостоверяване.

Тъй като всеки път, когато се изпълнява chromedriver, се зарежда нов профил, как мога постоянно да добавя плъгин към моите тестове? Знам, че има 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 е важно да предоставите списък с базово-64 кодирано пакетирано разширение за Chrome.

За да получите кодирано base64 разширение, трябва да прочетете файла с разширение .ctx и да кодирате съдържанието с base64. Например, използвайки python:

>>> 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 и изпълнявам теста си, той се проваля и не се показва съобщение за грешка. Само Process finished with exit code 100. Прочетох и темата, която ми предложихте, но не намерих решение за моя случай. - 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. Как взаимодействате с разширението? - 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
Линкът е мъртъв? github.com/andresdominguez/elementor/blob/master/bin/ - person ken lacoste; 03.08.2018
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
Headless Chrome не поддържа разширения npmjs.com/package/ , така че може да се наложи да използвате нещо като BrowserMob Proxy - github.com/lightbody/browsermob-proxy - person Jan Molak; 21.05.2020