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

это выглядит многообещающий. Есть ли способ загрузить скрипт с локальной машины? И.Е. 'script.src = 'http: //localhost/path/to/password_script.js';'. – jperezov

Смежные вопросы