我可以在不重置浏览器状态的情况下按顺序运行多个 RSpec/Selenium 测试吗?

Posted

技术标签:

【中文标题】我可以在不重置浏览器状态的情况下按顺序运行多个 RSpec/Selenium 测试吗?【英文标题】:Can I run multiple RSpec/Selenium tests in order without resetting browser state? 【发布时间】:2010-08-23 20:07:38 【问题描述】:

所以我刚开始使用 Steak,它又使用 Capybara,而 Capybara 又使用 Selenium。

所以我听说 RSpec 将测试拆分为许多小的 it 子句是一种很好的做法,每个子句都测试一小部分功能。但这会使测试运行花费更长的时间,因为每次测试都会重复相同的步骤。

假设我正在测试一些 ajax 功能。我想测试一下:

点击某个链接时会出现一个表单 如果我向该表单提交无效输入,则会出现错误消息 如果我提交了有效的输入等,会出现一条确认消息。

但是如果我把这些东西都分解成自己的测试用例,那么 Selenium 必须从头开始:它必须加载相同的页面 3 次,单击链接以使表单出现 3 次,等等。它让我觉得很浪费。

我希望能够指定一系列测试来保留浏览器状态,因此每个测试都会从前一个停止的地方继续进行。这可能吗?

【问题讨论】:

【参考方案1】:

这是可能的。 一种方法是覆盖 Capybara 的访问方法并跟踪最后一个 url,只有在它发生变化时才重新访问。

类似的东西:

module Capybara
  alias original_visit visit
  def visit(url)
    original_visit url if url != $last_url
    $last_url = url
  end
end

但只有当你真的知道自己在做什么时,你才应该这样做......

【讨论】:

最后一句有效。 ;-) 每当页面状态发生任何变化时,这显然都会以微妙的方式失败,所以我宁愿不要尝试这个。 (我想visit方法顺便会进入Capybara::Session。)

以上是关于我可以在不重置浏览器状态的情况下按顺序运行多个 RSpec/Selenium 测试吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不增加的情况下按字母顺序获取下一个字母? (php)

有没有办法在不安装包的情况下按字母顺序排列 package.json?

如何在不重置Java的情况下绘制多个对象

如何在没有递归或堆栈但使用父指针的情况下按顺序遍历 BST?

AngularJS、ocLazyLoad 和 ui-router:如何在不将“状态”集中在 app.js 主类上的情况下按需加载

我们可以在不重新加载页面的情况下重置 r 中的页面或对象吗