我正在使用实习生进行功能测试。其中一个测试需要登录到管理帐户:
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上:
00:19 | 0 | Send a sequence of key strokes to the active element. | password在SauceLabs上也是一样的:
COMMAND: POST keys
PARAMETERS: {"value":["password"]}问题在于对这些测试的访问不受限制--这些测试需要其他部门的人来查看。
即使没有这种情况,我也不希望攻击者突然获得对其他所有内容的管理员访问权限,以免测试帐户的密码被泄露。
有没有办法使密码在命令中不被存储/显示为纯文本?
我的团队目前正在考虑运行一个单独的脚本来激活/停用这些帐户,这样它们只能在运行功能测试时工作,但是我想看看是否有人想出了一个更好的解决方案。
发布于 2015-11-22 16:21:30
没有一种内置的方式来隐藏发送到远程浏览器的击键,也没有将它们排除在测试框架日志之外。从测试框架的角度来看,它们只是击键,而不是密码。
当然,处理这种情况的理想方法是使用目标应用程序的测试部署,这样既安全又允许更多的测试控制。不过,假设这不可能.
在不记录密码的情况下,将密码输入浏览器的一种可能性是让浏览器通过注入的脚本标记加载脚本,该标记将填充密码。基本上,您将有一个外部脚本,它将找到密码字段并输入值。在功能测试中,您需要将脚本标记注入浏览器,然后等待其加载,如下所示:
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脚本本身看起来可能如下:
(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();
})();发布于 2019-05-06 17:53:05
有一个未列出的Browser堆栈设置,您可以添加到您的功能中:
browserstack.maskSendKeys: true
所有输入都将被屏蔽在日志中。
https://github.com/DEFRA/quke/blob/master/.config.example.yml
https://stackoverflow.com/questions/33638555
复制相似问题