2015-11-10 31 views
1

我正在使用the Intern进行功能测试。一个这样的试验需要被记录到一个管理员帐户:在使用Intern/LeadFoot/Selenium的功能测试中隐藏密码

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"]} 

问题在于一个事实,即访问这些测试并不限制 - 这些测试需要由其他部门的人员查看。

即使没有,上关的机会,密码测试账号被泄露,我不想攻击者突然得到一切的管理员权限。

有没有什么办法让这个如图中的命令明文存储密码/?

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

回答

2

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

当然,处理这种情况的理想方式是使用目标应用程序的测试部署,这将是更安全,以便进行测试更多的控制。假设是不可能的,但...

用于获取密码进入而不会被记录的浏览器

一种可能性是让浏览器通过注入脚本标记将在填写密码加载脚本。基本上,你会有一个外部脚本来找到密码字段并输入值。在功能测试中,你需要的脚本标记注入到浏览器中,然后等待它加载,这样的:

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(); 
})(); 
+0

这看起来有希望。有没有办法从本地机器加载脚本? I.E. 'script.src ='http://localhost/path/to/password_script.js';'。 – jperezov