我可以在不重置浏览器状态的情况下按顺序运行多个 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 测试吗?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在不安装包的情况下按字母顺序排列 package.json?
如何在没有递归或堆栈但使用父指针的情况下按顺序遍历 BST?
AngularJS、ocLazyLoad 和 ui-router:如何在不将“状态”集中在 app.js 主类上的情况下按需加载