在量角器测试期间,我一直在尝试处理基本身份验证。有点困难,所以我找到了一个 chrome 插件,它会自动发送我的凭据,用于需要基本身份验证的网站。
每次执行 chromedriver 时,都会加载一个新的配置文件,我如何才能永久地将插件添加到我的测试中?我知道有https://sites.google.com/a/chromium.org/chromedriver/extensions,但我认为这不是很清楚。
在量角器测试期间,我一直在尝试处理基本身份验证。有点困难,所以我找到了一个 chrome 插件,它会自动发送我的凭据,用于需要基本身份验证的网站。
每次执行 chromedriver 时,都会加载一个新的配置文件,我如何才能永久地将插件添加到我的测试中?我知道有https://sites.google.com/a/chromium.org/chromedriver/extensions,但我认为这不是很清楚。
检查这个:https ://github.com/andresdominguez/elementor/blob/master/bin/elementexplorer.js#L194
在这里,我从本地目录加载扩展。扩展名不是 crx 文件,而是未压缩的版本。
'chromeOptions': {
'args': ['--load-extension=' + extensionPath]
}
您需要在extensions
里面配置列表chromeOptions
:
capabilities {
'browserName': 'chrome',
'chromeOptions': {
'extensions': ['base64 encoded extension']
}
}
请注意,在其中,提供base-64 编码的打包 Chrome 扩展列表extensions
很重要。
要获得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
and创建文件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'),
...
}
目前,它与单个扩展一起工作,因此还有改进的余地。
此外,如果您遇到问题,请查看以下问题:
与其在代码中提交扩展并在运行测试时必须从磁盘加载它,不如考虑使用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()
]
}
},
}
专业提示:记住不要用你的代码提交你的凭据,考虑使用环境变量。
希望这可以帮助!
简