Created
April 20, 2017 17:38
-
-
Save tdegrunt/4e01e130c57826497c094425d55b36de to your computer and use it in GitHub Desktop.
Browserstack remote capabilities and tunnel setup (capybara with cucumber)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Capybara.app_host = "http://localhost:3001" | |
Capybara.run_server = false |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'capybara/cucumber' | |
require 'selenium/webdriver' | |
WebMock.disable_net_connect!(:allow_localhost => true,:allow=>/browserstack/) | |
browsers = JSON.parse(File.read "support/supported_browsers.json") | |
def open_tunnel! | |
Capybara.default_wait_time = 5 | |
Capybara.server_port = 3001 | |
sleep 3 | |
`java -jar features/support/BrowserStackTunnel.jar #{ENV['BS_AUTHKEY']} localhost,#{Capybara.server_port},0 -v >log/browserstack.log 2>&1 &` | |
sleep 3 | |
until (`curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:45691`.to_i == 200) | |
sleep 5 | |
end | |
end | |
at_exit do | |
`ps -ef | awk '/BrowserStackTunnel.*,#{Capybara.server_port},/{print $2}' | xargs kill -9` | |
end | |
$capybara_drivers ||= {} | |
def find_and_register_driver(browser) | |
url = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub.browserstack.com/wd/hub" | |
browser[:symbol] ||= %w(os os_version browser browser_version).inject([]){|str,k| str << browser[k] }.compact.join("_").to_sym | |
$capybara_drivers[browser[:symbol]] ||= begin | |
Capybara.register_driver browser[:symbol] do |app| | |
capabilities = Selenium::WebDriver::Remote::Capabilities.new | |
capabilities['os'] = browser['os'] | |
capabilities['os_version'] = browser['os_version'] | |
capabilities['browser'] = browser['browser'] | |
capabilities['browser_version'] = browser['browser_version'] | |
capabilities['browserstack.tunnel'] = 'true' | |
capabilities['browserstack.debug'] = 'true' | |
Capybara::Selenium::Driver.new(app, | |
:browser => :remote, :url => url, | |
:desired_capabilities => capabilities) | |
end | |
end | |
browser[:symbol] | |
end | |
Around("@xbrowser") do |scenario,block| | |
orig_driver = Capybara.default_driver | |
$only_open_tunnel_once ||= (open_tunnel! || true) | |
begin | |
browser = browsers[0] | |
Capybara.default_driver = find_and_register_driver(browser) | |
ensure | |
Capybara.default_driver = orig_driver | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment