【问题标题】:Is it possible to add a plugin to chromedriver under a protractor test?是否可以在量角器测试下向 chromedriver 添加插件?
【发布时间】:2014-12-03 17:44:23
【问题描述】:

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

每次执行 chromedriver 时,都会加载一个新的配置文件,我怎样才能在我的测试中永久添加一个插件?我知道有https://sites.google.com/a/chromium.org/chromedriver/extensions,但我觉得不是很清楚。

【问题讨论】:

    标签: javascript angularjs protractor selenium-chromedriver end-to-end


    【解决方案1】:

    你需要在chromeOptions里面配置extensions列表:

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

    注意它在extensions,提供list of base-64 encoded packed Chrome extension很重要。

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

    目前,它适用于单个扩展程序,因此还有改进的空间。

    此外,如果您遇到问题,请查看以下问题:

    【讨论】:

    • 谢谢,非常有帮助!但我对这个解决方案有疑问。当我将路径设置为我想要的 .crx 并运行我的测试时,它失败了,并且没有显示错误消息。只是Process finished with exit code 100。我还阅读了您建议我的主题,但没有找到适合我的情况的解决方案。
    • 它不提供堆栈跟踪。这几乎就是一切:"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
    • @andrepm 如果省略extensions 会怎样?它在运行吗?谢谢。
    • 是的,我尝试评论 extensions 和扩展路径本身。两种方式,我的测试运行正常。
    • @andrepm 很有趣,你能给出扩展名吗?我将尝试重现该问题。谢谢。
    【解决方案2】:

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

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

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

    【讨论】:

    • 它对我不起作用。是这样的吗? 'chromeOptions': { 'args': ['--load-extension=' + 'C:/Users/QARJ/AppData/Local/Google/Chrome/User Data/Default/Extensions/dgpgkkfheijbcgjklcbnokoleebmeokn/1.1_0'] }
    • 也许用户数据中的空间给您带来了麻烦。可以把扩展复制到 C:/tmp 来测试吗?
    • 我很高兴听到这个消息。祝测试愉快!另外,请查看我的 elementor 工具:npmjs.org/package/elementor 我正在寻找反馈
    • 嗨@andrepm,这是可行的解决方案吗?出于好奇,为什么另一个答案被标记为接受的答案?
    • 您好,两种解决方案都有效。另一个被标记只是因为它是第一个。
    【解决方案3】:

    您可能要考虑使用我最近开源的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 变量。

    希望这会有所帮助!

    一月

    【讨论】:

    • 看起来这应该是 2019 年公认的解决方案。谢谢!
    • 谢谢,很高兴它有用!
    • 这适用于 chrome。但无法使用无头镀铬。你知道其他选择吗?
    • Headless Chrome 不支持扩展 npmjs.com/package/… ,因此您可能需要使用类似 BrowserMob 代理 - github.com/lightbody/browsermob-proxy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多