Selenium 水豚/硒与rspec前:所有挂钩
为了减少selenium的页面访问次数,我想从Selenium 水豚/硒与rspec前:所有挂钩,selenium,capybara,rspec2,Selenium,Capybara,Rspec2,为了减少selenium的页面访问次数,我想从before:allhook调用visit方法,并用单个页面加载运行我的所有示例。但是,当我指定before:all与before:each时,浏览器将打开,但从未访问过url。下面是一个简化和人为的例子 description'foobar',:js=>true do 以前:所有人都这样做 Capybara.default\u wait\u time=10 obj=工厂(:obj) 访问obj_路径(obj) 结束 它“应该有福多” 第页应包含_内
before:all
hook调用visit方法,并用单个页面加载运行我的所有示例。但是,当我指定before:all
与before:each
时,浏览器将打开,但从未访问过url。下面是一个简化和人为的例子
description'foobar',:js=>true do
以前:所有人都这样做
Capybara.default\u wait\u time=10
obj=工厂(:obj)
访问obj_路径(obj)
结束
它“应该有福多”
第页应包含_内容(“foo”)
结束
它“应该有酒吧”吗
第页应包含内容(“栏”)
结束
结束
当我将其设置为before:each时,它可以工作,但页面会加载两次。这是水豚限制吗?问题的原因
第二个示例不起作用,因为水豚会在每个RSpec示例之后重置会话;此时,您在之前的块中访问的页面将不再打开。这是水豚的明显行为。它位于capybara
gem的/lib/capybara/rspec.rb下:
config.after do
if self.class.include?(Capybara::DSL)
Capybara.reset_sessions!
Capybara.use_default_driver
end
end
我在谷歌上搜索了几个小时,发现还有几个人在努力解决这个问题,真的没有用
我还发现,一个允许水豚配置为在每个示例提出后不重置会话的。。。但是水豚创造者jnicklas
解决方案
我(到目前为止)发现的最快——也许不是最好——可行的解决方案是水豚:
module Capybara
class << self
alias_method :old_reset_sessions!, :reset_sessions!
def reset_sessions!; end
end
end
模块水豚
类还可以看到一个问题,我还需要能够在加载一个页面后运行几个示例。解决了这个问题,或者找到了一个解决方法吗?似乎无法让它工作。。。puts语句将指示该方法确实被重写,但这与before(:all)一起会破坏我的所有规范。我发现我的特性规范遵循一种模式:访问页面、执行操作、验证页面内容。为每个it{}块重新运行before块没有意义。测试JS已经足够慢了……我可能会看看Riot测试框架,因为它在每个上下文中只运行一次安装程序。