是否可以在量角器测试下将插件添加到 chromedriver

Is it possible to add a plugin to chromedriver under a protractor test?

本文关键字:插件 添加 chromedriver 测试 量角器 是否      更新时间:2023-09-26

我一直在尝试在量角器测试期间处理基本身份验证。有些困难,所以我找到了一个 chrome 插件,它会自动发送我的凭据,用于需要基本身份验证的网站。

由于每次执行chromedriver时,都会加载一个新的配置文件,因此我如何永久地将插件添加到我的测试中?我知道有 https://sites.google.com/a/chromium.org/chromedriver/extensions,但我不认为这是很清楚的。

您需要在chromeOptions内配置extensions列表:

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

请注意,在extensions中,提供base-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

或者,更简单的是,使用 fsq 制作helper.js文件:

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'),
    ...
}

目前,它适用于单个扩展,因此还有改进的余地。

此外,如果

遇到问题,请查看以下问题:

  • 设置版式选项

检查这个: https://github.com/andresdominguez/elementor/blob/master/bin/elementexplorer.js#L194

在这里,我正在从本地目录加载扩展。扩展名不是crx文件,而是未压缩的版本。

'chromeOptions': {
  'args': ['--load-extension=' + extensionPath]
}

与其使用代码提交扩展并在运行测试时必须从磁盘加载它,不如考虑使用我最近开源的 authenticator-browser-extension Node 模块。

要使用模块,请从 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 变量。

希望这有帮助!

一月