Reputation: 1381
I have two drivers
Mobile:
Capybara.register_driver :selenium do |app|
args = []
args << "-user-agent='Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'"
Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
end
Desktop:
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
and currently i add it for each test and it's a bit inconvenient.
I want to set it up in my spec_helper
,but how i can do it?
The result should look like this:
if folder.mobile?
use mobile driver
else
desktop driver
end
Upvotes: 1
Views: 865
Reputation: 1381
i have done it
inside spec_helper
config.before(:each) do
mobile = config.instance_variable_get(:@files_or_directories_to_run)[0].include?('mobile')
if mobile
Capybara.register_driver :selenium do |app|
args = []
args << "-user-agent='Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'"
Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
end
else
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
end
end
upd:
it works only if you run tests separatly
for example
rspec spec/mobile/... etc
but if run just rspec
it wan't work
Upvotes: 0
Reputation: 49890
There are multiple ways to switch drivers per test but the first step is to define your drivers with different names so you can switch between them rather than continuously redefining them
Capybara.register_driver :selenium_mobile do |app|
args = []
args << "-user-agent='Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'"
Capybara::Selenium::Driver.new(app, :browser => :chrome, :args => args)
end
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Then assuming you are using the normal capybara/rspec config you can tag your mobile features with driver: :selenium_mobile
feature "do something mobile", driver: :selenium_mobile do
...
end
or if you want to base it on the directory you can do something like
RSpec.before(:each) do |example|
if self.class.include?(Capybara::DSL) and example.file_path.include?('mobile')
Capybara.current_driver = :selenium_mobile
end
end
The exact config needed would depend on how exactly you're configuring drivers for your non-mobile tests.
Upvotes: 4