|
| 1 | +require 'yaml' |
1 | 2 | require 'selenium/webdriver' |
2 | 3 | require 'capybara/cucumber' |
3 | 4 | require 'browserstack/local' |
4 | | -require 'browserstack-automate' |
5 | | -BrowserStack.for "cucumber" |
6 | 5 |
|
7 | | -url = "https://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub.browserstack.com/wd/hub" |
8 | | - |
9 | | -Capybara.register_driver :browserstack do |app| |
| 6 | +# monkey patch to avoid reset sessions |
| 7 | +class Capybara::Selenium::Driver < Capybara::Driver::Base |
| 8 | + def reset! |
| 9 | + @browser.navigate.to('about:blank') if @browser |
| 10 | + end |
| 11 | +end |
10 | 12 |
|
11 | | - capabilities = Selenium::WebDriver::Remote::Capabilities.new |
12 | | - if ENV['BS_AUTOMATE_OS'] |
13 | | - capabilities['os'] = ENV['BS_AUTOMATE_OS'] |
14 | | - capabilities['os_version'] = ENV['BS_AUTOMATE_OS_VERSION'] |
15 | | - else |
16 | | - capabilities['platform'] = ENV['SELENIUM_PLATFORM'] || 'ANY' |
17 | | - end |
| 13 | +TASK_ID = (ENV['TASK_ID'] || 0).to_i |
| 14 | +CONFIG_NAME = ENV['CONFIG_NAME'] || 'single' |
18 | 15 |
|
19 | | - capabilities['browser'] = ENV['SELENIUM_BROWSER'] || 'chrome' |
20 | | - capabilities['browser_version'] = ENV['SELENIUM_VERSION'] if ENV['SELENIUM_VERSION'] |
21 | | - capabilities['browserstack.debug'] = 'true' |
22 | | - capabilities['project'] = ENV['BS_AUTOMATE_PROJECT'] if ENV['BS_AUTOMATE_PROJECT'] |
23 | | - capabilities['build'] = ENV['BS_AUTOMATE_BUILD']? ENV['BS_AUTOMATE_BUILD'] : 'browserstack-build-1' |
24 | | - capabilities['browserstack.local'] = 'false' |
25 | | - capabilities['browserstack.source'] = 'cucumber-ruby:sample-master:v1.0' |
| 16 | +CONFIG = YAML.safe_load(File.read(File.join(File.dirname(__FILE__), "../../config/#{CONFIG_NAME}.config.yml"))) |
| 17 | +CONFIG['user'] = ENV['BROWSERSTACK_USERNAME'] || CONFIG['user'] |
| 18 | +CONFIG['key'] = ENV['BROWSERSTACK_ACCESS_KEY'] || CONFIG['key'] |
26 | 19 |
|
27 | | - if capabilities['browserstack.local'] && capabilities['browserstack.local'] == 'true'; |
| 20 | +Capybara.register_driver :browserstack do |app| |
| 21 | + @caps = CONFIG['common_caps'].merge(CONFIG['browser_caps'][TASK_ID]) |
| 22 | + # Code to start browserstack local before start of test |
| 23 | + if @caps['browserstack.local'] && @caps['browserstack.local'].to_s == 'true' |
28 | 24 | @bs_local = BrowserStack::Local.new |
29 | | - bs_local_args = { "key" => "#{ENV['BS_AUTHKEY']}", "forcelocal" => true } |
| 25 | + bs_local_args = { 'key' => (CONFIG['key']).to_s } |
30 | 26 | @bs_local.start(bs_local_args) |
31 | 27 | end |
32 | | - Capybara::Selenium::Driver.new(app, :browser => :remote, :url => url, :desired_capabilities => capabilities) |
33 | | - |
34 | 28 |
|
| 29 | + Capybara::Selenium::Driver.new(app, |
| 30 | + browser: :remote, |
| 31 | + url: "https://#{CONFIG['user']}:#{CONFIG['key']}@#{CONFIG['server']}/wd/hub", |
| 32 | + desired_capabilities: @caps) |
35 | 33 | end |
36 | 34 |
|
37 | 35 | Capybara.default_driver = :browserstack |
38 | | -Capybara.app_host = "http://www.google.com" |
39 | 36 | Capybara.run_server = false |
40 | 37 |
|
| 38 | +# Code to stop browserstack local after end of test |
41 | 39 | at_exit do |
42 | | - @bs_local.stop unless @bs_local.nil? |
| 40 | + @bs_local.stop unless @bs_local.nil? |
43 | 41 | end |
0 commit comments