如何在集成测试中模拟密码自动填充?

时间:2015-07-30 17:21:32

标签: ruby-on-rails devise integration-testing minitest capybara-webkit

在我的密码更改页面上,我有一个名为password的新密码字段,以及名为current_password的当前密码字段,以便密码管理员可以获取更改并提示您保存新密码。 (也是默认的设计行为)

但是,如果用户不想更改密码,我会让他们将新密码字段留空(再次设置默认行为),但密码管理员通常会使用当前密码自动填充此字段。

这不是问题,如果自动输入值,我只使用js清除字段。但是我想测试一下,并且无法弄清楚如何让capybara(webkit驱动程序)以一种不被js解释为手动的方式填充该字段。 (即不关注该领域)

目前,如果在输入值之前字段未聚焦,我会擦除值(一次)。这样就没有竞争条件,如果用户想要使用它,那么该领域就变得易于理解(聚焦该领域)。

1 个答案:

答案 0 :(得分:0)

Capybara is designed to emulate user interaction. Since a user would focus the field, Capybara does also.
One way around that might be to use javascript from within capybara to fill the field. Perhaps try something like:

page.execute_script( "$('input[name=password]').val('user-password')" )

execute_script injects JS into the page Capybara is testing. Note that when using this method you do have to handle waiting on your own.