我正在尝试设置环境,以便在不同的浏览器中运行我的TC。但目前TC只是在Chrome浏览器中正常运行,Firefox浏览器是打开的,但当我试图在FF、Opera、Safari浏览器中运行TC时,不会发生任何事情(测试场景不会运行)。如何调整我的设置,使之能够在所有浏览器中成功运行TC?还有一种方法可以并行运行TC吗?这是我的rails_helper.rb文件:
require 'test/unit'
require 'selenium-webdriver'
require 'capybara'
require 'rspec'
require "rails/all"
require 'capybara/rspec'
require "page-object"
require 'rspec/expectations'
require 'securerandom'
require '../Test_helpers/login_helper'
require 'capybara-screenshot/rspec'
require 'launchy'
RSpec.configure do |config|
config.include LoginHelper
config.include RSpec::Matchers
config.include Capybara::DSL
environment = 'firefox'
if environment =='chrome'
Selenium::WebDriver::Chrome.driver_path = '../Resources/chromedriver.exe'
Capybara.default_driver = :chrome
Capybara.register_driver :selenium do |app|
options = {
:js_errors => false,
:timeout => 360,
:debug => false,
:inspector => false,
}
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
elsif environment =='firefox'
Capybara.default_driver = :firefox
Capybara.register_driver :selenium do |app|
options = {
:js_errors => true,
:timeout => 360,
:debug => false,
:inspector => false,
}
Capybara::Selenium::Driver.new(app, :browser => :firefox)
end
elsif environment == 'safari'
Capybara.default_driver = :safari
Capybara.register_driver :safari do |app|
options = {
:js_errors => false,
:timeout => 360,
:debug => false,
:inspector => false,
}
Capybara::Selenium::Driver.new(app, :browser => :safari)
end
elsif environment == 'opera'
Capybara.default_driver = :opera
Capybara.register_driver :opera do |app|
options = {
:js_errors => false,
:timeout => 360,
:debug => false,
:inspector => false,
}
Capybara::Selenium::Driver.new(app, :browser => :opera)
end
elsif
Capybara.default_driver = :poltergeist
Capybara.register_driver :poltergeist do |app|
options = {
:js_errors => false,
:timeout => 360,
:debug => false,
:phantomjs_options => ['--load-images=no', '--disk-cache=false'],
:inspector => false,
}
Capybara::Poltergeist::Driver.new(app, options)
end
end
Capybara.save_path = "../Reports" # path where screenshots are saved
config.after { |example_group| CapybaraScreenshot.save_and_open_page_path if example_group.exception }
Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example|
"screenshot_#{example.description.gsub(' ', '-').gsub(/^.*\/spec\//, '')}"
end
end
Capybara.default_max_wait_time = 15发布于 2017-04-24 09:11:21
如果您碰巧通过这里寻找通过许多浏览器运行每个测试的方法,我写了这个(工作!)(过于健谈)基于托马斯·沃尔波尔公认的答案的片段:
Rspec.configure do |conf|
Capybara.register_driver :chrome do |mode|
Capybara::Selenium::Driver.new mode, :browser => :remote, :desired_capabilities => :chrome
end
Capybara.register_driver :firefox do |mode|
Capybara::Selenium::Driver.new mode, :browser => :remote, :desired_capabilities => :firefox
end
## Here we politely ask every example to run twice, for each browser we want
conf.around do |example|
puts '~> ' + example.metadata[:example_group][:full_description]
# avoid looping over Capybara.drivers as it will also contain "selenium" generic driver and "rack_test" basic (js-less) browser
[:chrome, :firefox].each do |browser|
Capybara.current_driver = browser
puts "~~> #{example.description} @ #{browser}"
example.run
end
end
Capybara.default_driver = :chrome
end输出的结尾类似于:
~> The contact page
~~> loads @ chrome
~~> loads @ firefox
.
Finished in 20.9 seconds (files took 2.69 seconds to load)
1 example, 0 failures显然,所有的puts行都可以删除/注释掉,它们只是为了示例目的而存在:)
在每一行~~>之后,所述浏览器将打开并运行该示例。
但是,必须注意将:js => true从示例中删除,否则Capybara将强制对默认的javascript_driver运行它们。
发布于 2016-10-10 16:32:09
您要传递给您注册的驱动程序的选项只对poltergeist有效。您可以注册所有的驱动程序,然后使用所需的驱动程序,而不是大的if/否则。
RSpec.configure do |config|
config.include LoginHelper # You probably want to only include this for feature tests
config.include RSpec::Matchers # not needed if you use the standard capybara rspec setup by including capybara/rspec
config.include Capybara::DSL # not needed if you use the standard capybara rspec setup by including capybara/rspec
end
Capybara.save_path = "../Reports" # path where screenshots are saved
config.after { |example_group| CapybaraScreenshot.save_and_open_page_path if example_group.exception }
Capybara::Screenshot.register_filename_prefix_formatter(:rspec) do |example|
"screenshot_#{example.description.gsub(' ', '-').gsub(/^.*\/spec\//, '')}"
end
end
Selenium::WebDriver::Chrome.driver_path = '../Resources/chromedriver.exe'
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Capybara.register_driver :selenium_firefox do |app|
Capybara::Selenium::Driver.new(app, :browser => :firefox)
end
Capybara.register_driver :selenium_safari do |app|
Capybara::Selenium::Driver.new(app, :browser => :safari)
end
Capybara.register_driver :selenium_opera do |app|
Capybara::Selenium::Driver.new(app, :browser => :opera)
end
Capybara.register_driver :poltergeist do |app|
options = {
:js_errors => false,
:timeout => 360,
:debug => false,
:phantomjs_options => ['--load-images=no', '--disk-cache=false'],
:inspector => false,
}
Capybara::Poltergeist::Driver.new(app, options)
end然后将Capybara.default_driver和/或Capybara.javascript_driver (取决于是否使用rack_test和标签测试运行某些需要JS的测试)设置为要用于运行测试的驱动程序。
Capybara.default_driver = :selenium_chrome要在多个浏览器上运行所有测试,正常的做法是将CI系统配置为多次运行,并为每次运行设置不同的驱动程序(例如,基于环境变量)。如果您需要在一次运行中全部运行它们,您可以让您的RSpec测试全部共享示例,然后配置包含共享示例的测试块,但每个测试块在一个前置块中设置一个不同的驱动程序。
对于并行测试,您可以查看parallel_tests gems - tests。
https://stackoverflow.com/questions/39955782
复制相似问题