首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Intern / LeadFoot / Selenium在功能测试中隐藏密码

使用Intern / LeadFoot / Selenium在功能测试中隐藏密码
EN

Stack Overflow用户
提问于 2015-11-10 20:04:22
回答 2查看 915关注 0票数 1

我正在使用实习生进行功能测试。其中一个测试需要登录到管理帐户:

代码语言:javascript
复制
registerSuite({
    name: 'login',

    'login': function() {
        return this.remote
            .get(URL)
            .findById('username')
                .click()
                .pressKeys(USER.ADMIN.USERNAME)
                .end()
            .findById('password')
                .click()
                .pressKeys(USER.ADMIN.PASSWORD)
                .pressKeys('\n')
                .end()
            .findByCssSelector('.login-welcome')
                .getVisibleText()
            .then(function(text) {
                assert.strictEqual(text, USER.ADMIN.NAME, 'User should now be logged in');
            });
    }
});

现在,问题是这个密码是以纯文本形式传入的。在这里,它显示在BrowserStack上:

代码语言:javascript
复制
00:19 | 0 | Send a sequence of key strokes to the active element. | password

在SauceLabs上也是一样的:

代码语言:javascript
复制
COMMAND: POST keys
PARAMETERS: {"value":["password"]}

问题在于对这些测试的访问不受限制--这些测试需要其他部门的人来查看。

即使没有这种情况,我也不希望攻击者突然获得对其他所有内容的管理员访问权限,以免测试帐户的密码被泄露。

有没有办法使密码在命令中不被存储/显示为纯文本?

我的团队目前正在考虑运行一个单独的脚本来激活/停用这些帐户,这样它们只能在运行功能测试时工作,但是我想看看是否有人想出了一个更好的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2015-11-22 16:21:30

没有一种内置的方式来隐藏发送到远程浏览器的击键,也没有将它们排除在测试框架日志之外。从测试框架的角度来看,它们只是击键,而不是密码。

当然,处理这种情况的理想方法是使用目标应用程序的测试部署,这样既安全又允许更多的测试控制。不过,假设这不可能.

在不记录密码的情况下,将密码输入浏览器的一种可能性是让浏览器通过注入的脚本标记加载脚本,该标记将填充密码。基本上,您将有一个外部脚本,它将找到密码字段并输入值。在功能测试中,您需要将脚本标记注入浏览器,然后等待其加载,如下所示:

代码语言:javascript
复制
return this.remote
    .get(URL)
    .findById('username')
        .click()
        .pressKeys(USER.ADMIN.USERNAME)
        .end()
    .executeAsync(function (done) {
        window._intern_done = done;
        var script = document.createElement('script');
        script.src = '/path/to/password_script.js';
        document.head.appendChild(script);
    })
    .findByCssSelector('.login-welcome')
    // continue testing

脚本本身看起来可能如下:

代码语言:javascript
复制
(function () {
    // set the password
    var passwordField = document.getElementById('password');
    passwordField.value = 'secret password';
    // clean up the _intern_done global we set in the executeAsync block
    var done = window._intern_done;
    delete window._intern_done;
    // let Intern know we're done
    done();
})();
票数 2
EN

Stack Overflow用户

发布于 2019-05-06 17:53:05

有一个未列出的Browser堆栈设置,您可以添加到您的功能中:

browserstack.maskSendKeys: true

所有输入都将被屏蔽在日志中。

https://github.com/DEFRA/quke/blob/master/.config.example.yml

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33638555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档