Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 水豚/硒与rspec前:所有挂钩_Selenium_Capybara_Rspec2 - Fatal编程技术网

Selenium 水豚/硒与rspec前:所有挂钩

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) 结束 它“应该有福多” 第页应包含_内

为了减少selenium的页面访问次数,我想从
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测试框架,因为它在每个上下文中只运行一次安装程序。