【问题标题】:How can I simulate password autofilling in my integration test?如何在集成测试中模拟密码自动填充?
【发布时间】:2015-07-30 17:21:32
【问题描述】:

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

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

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

目前,如果在输入值之前该字段没有聚焦,我会擦除该值(一次)。这样就没有竞争条件,并且如果用户想要使用该字段(聚焦该字段),该字段将变得易于使用。

【问题讨论】:

  • 您是否尝试在新密码输入中添加autocomplete="false"
  • 是的,这些天浏览器在密码字段中忽略了这一点。
  • 我认为他们忽略了autocomplete="off",但autocomplete="false" 有效,我想最近一定已经改变了。如果归根结底,我遇到了一些可以解决问题的 hacky 替代方案。首先是将输入设为只读,然后使用 javascript 删除焦点上的只读属性(请参阅here)。您也可以尝试添加诱饵输入,如 here 所示。这些方法也可能不起作用,但您可以尝试一下。
  • 你读过这个问题吗?我有一个清除密码的有效解决方案,我只想在我的测试中介绍该功能。

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


【解决方案1】:

Capybara 旨在模拟 用户 交互。由于用户会关注该领域,Capybara 也会这样做。
解决这个问题的一种方法可能是使用 capybara 中的 javascript 来填充该字段。也许尝试类似:

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

execute_script 将 JS 注入 Capybara 正在测试的页面中。请注意,使用此方法时,您必须自己处理等待。

【讨论】:

  • 我没有挂在水豚上,还有其他工具更适合测试这个吗?
  • 您是否尝试过使用execute_script?如果它对您有用,那将比设置另一个工具更快。您也可以只在 javascript 函数上编写单元测试。有很多工具可以做到这一点,包括 Jasmine、mocha 和 qunit。我确实在这里看到了一个潜在的问题,您的功能与特定密码管理器的实现绑定在一起,这些密码管理器可能会在不通知您的情况下发生变化。
  • 它行得通,我只是确保我没有错过了解测试此类事情的潜在更好方法的机会。
  • 太棒了。我认为这是我会走的路线,除非我打算做足够的 JS 来保证为其添加一个单元测试套件。如果你是,那么一定要看看 Jasmine(在 Rails 世界中很流行)和 Mocha(很多人都喜欢)。还有很多其他的。
猜你喜欢
  • 2019-08-18
  • 2019-02-09
  • 2019-12-07
  • 2019-09-02
  • 2011-09-30
  • 1970-01-01
  • 2020-10-29
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多