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
Ruby on rails Rspec+;水豚可以选择更改JS驱动程序_Ruby On Rails_Selenium_Rspec_Capybara_Poltergeist - Fatal编程技术网

Ruby on rails Rspec+;水豚可以选择更改JS驱动程序

Ruby on rails Rspec+;水豚可以选择更改JS驱动程序,ruby-on-rails,selenium,rspec,capybara,poltergeist,Ruby On Rails,Selenium,Rspec,Capybara,Poltergeist,我对CI使用poltergeist/phantomjs,但我希望能够选择性地将JS驱动程序更改为selenium,以便在本地观看我的测试运行。理想情况下,我希望为这个默认的poltergeist设置一个命令行标志,但是能够运行rspec--driver=selenium(或类似的东西) 有什么想法吗?最终没有找到答案,所以我想出了一个骇人的解决方案: 我发现唯一可以可靠改变的是标签系统。所以我调用using-tvisualtag,然后把它拿走 在spec/spec_helper.rb中 Rspe

我对CI使用poltergeist/phantomjs,但我希望能够选择性地将JS驱动程序更改为selenium,以便在本地观看我的测试运行。理想情况下,我希望为这个默认的poltergeist设置一个命令行标志,但是能够运行rspec--driver=selenium(或类似的东西)


有什么想法吗?

最终没有找到答案,所以我想出了一个骇人的解决方案:

我发现唯一可以可靠改变的是标签系统。所以我调用using-tvisualtag,然后把它拿走

在spec/spec_helper.rb中

Rspec.configure do |config|
  if config.filter_manager.inclusions[:visual]
    Capybara.javascript_driver = :selenium
    config.filter_manager.inclusions.delete(:visual)
  else
    Capybara.javascript_driver = :poltergeist
  end

~rest of rspec config code~
现在,您可以使用
rspec(要运行的测试)-t visual运行测试了

这样做的主要问题是它会阻止您运行特定的测试。您仍然可以使用
rspec spec/features/signup_spec.rb-t visual
创建单个文件,但不能添加
:54
以在特定行号上运行。

您可以从可以在spec/spec\u helper.rb中使用的命令行设置环境变量:

DEBUG = ENV['DEBUG'] || false
if DEBUG
  Capybara.default_driver = :selenium
else
  Capybara.default_driver = :rack_test
  Capybara.javascript_driver = :poltergeist
end
然后可以从命令行运行,如下所示:

DEBUG=true rspec spec/features/my_spec.rb:35

这将允许您指定特定的行号

您可能还必须根据正在使用的水豚驱动程序(即,使用数据库清理器)更改清理策略:

如果您想获得更多乐趣,可以将其与stackoverflow答案结合起来:要降低selenium在调试模式下运行规范时的运行速度,请执行以下操作:

config.before(:each) do |group|
  set_speed :slow if DEBUG
end

我有一个我认为不那么老套的解决方案。我基本上是在剽窃杰夫·佩林的解决方案,但让它变得不那么复杂

我的
DatabaseCleaner
只是设置为始终使用截断,因此无需有条件地配置该部分

按以下方式设置
javascript\u驱动程序

# spec/spec_helper.rb

Capybara.javascript_driver = ENV['USE_SELENIUM_FOR_CAPYBARA'] ? :selenium : :webkit
如果我们总是显式地将
javascript\u-driver
设置为某个值,我认为没有必要设置Capybara的默认驱动程序。(杰夫可能知道一些我不知道的事情。)

这将使用Webkit作为驱动程序,除非您的环境中设置了
use\u SELENIUM\u FOR\u CAPYBARA


如果您希望RSpec能够与任何一个驱动程序一起工作,那么您的Gemfile中当然也应该同时包含Selenium和Webkit驱动程序gems。

这个解决方案对我来说非常有效。我设置了一个环境变量并检查其值。将其添加到spec_helper.rb文件中

if ENV['DRIVER'] =='poltergeist' //use any driver you want to run on circlci
  Capybara.default_driver = :poltergeist
  URL = // use your own end point like http://www.localhost:8080
else
   Capybara.default_driver = :selenium
   URL = // Use your end point
end 
Capybara.configure do |config|
  config.app_host = URL
end
然后在控制台上运行这个命令

DRIVER=poltergeist rspec//用于在poltergeist上运行测试


rspec//在selenium上运行

否,您实际上可以添加行号
:54
来运行特定测试,至少在2015年和2016年,但我不记得在2014年是否也可以。
if ENV['DRIVER'] =='poltergeist' //use any driver you want to run on circlci
  Capybara.default_driver = :poltergeist
  URL = // use your own end point like http://www.localhost:8080
else
   Capybara.default_driver = :selenium
   URL = // Use your end point
end 
Capybara.configure do |config|
  config.app_host = URL
end