class Shoot::Scenario
Public Class Methods
new(platform=nil)
click to toggle source
# File lib/shoot/scenario.rb, line 17 def initialize(platform=nil) if platform @platform = platform config_capabilities Capybara.register_driver platform_name do |app| Capybara::Selenium::Driver.new(app, browser: :remote, url: Shoot::Scenario.url, desired_capabilities: @capabilities) end else require 'capybara/poltergeist' options = { :js_errors => false, :phantomjs_options => ["--web-security=false"] } Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app, options) end Capybara.run_server = false @platform_name = :poltergeist end Capybara.default_max_wait_time = 10 Capybara.current_driver = platform_name end
url()
click to toggle source
# File lib/shoot/scenario.rb, line 9 def self.url raise "I guess you forgot your browserstack credetials. Take a look at the docs." unless ENV['BROWSERSTACK_USER'] and ENV['BROWSERSTACK_KEY'] @@url ||= sprintf 'http://%s:%s@hub.browserstack.com/wd/hub', ENV['BROWSERSTACK_USER'], ENV['BROWSERSTACK_KEY'] end
Public Instance Methods
platform_name()
click to toggle source
# File lib/shoot/scenario.rb, line 62 def platform_name @platform_name ||= if @platform.device @platform.device else [ @platform.browser, @platform.browser_version, @platform.os, @platform.os_version ].join(' ') end end
quit()
click to toggle source
# File lib/shoot/scenario.rb, line 58 def quit page.driver.quit end
run(method)
click to toggle source
# File lib/shoot/scenario.rb, line 47 def run(method) @current_method = method send(method) shoot(:finish) [true, nil] rescue => e File.write("#{directory}/backtrace.txt", e.backtrace.join("\n")) shoot(:failed) [false, e] end
Protected Instance Methods
enter_key()
click to toggle source
In Selenium the enter key is :return and on poltergeits it is :Enter
# File lib/shoot/scenario.rb, line 79 def enter_key remote? ? :return : :Enter end
remote?()
click to toggle source
# File lib/shoot/scenario.rb, line 83 def remote? @platform_name != :poltergeist end
send_enter(selector)
click to toggle source
# File lib/shoot/scenario.rb, line 87 def send_enter(selector) find(selector).native.send_key(enter_key) end
Private Instance Methods
config_capabilities()
click to toggle source
# File lib/shoot/scenario.rb, line 108 def config_capabilities # rubocop:disable AbcSize @capabilities = Selenium::WebDriver::Remote::Capabilities.new @capabilities[:browser] = @platform.browser @capabilities[:browser_version] = @platform.browser_version @capabilities[:os] = @platform.os @capabilities[:os_version] = @platform.os_version @capabilities['browserstack.debug'] = 'true' @capabilities[:name] = "Digital Goods - #{@platform.to_h}" @capabilities[:browserName] = @platform.browser @capabilities[:platform] = @platform.os @capabilities[:device] = @platform.device if @platform.device @capabilities[:emulator] = @platform.emulator @capabilities[:rotatable] = true end
directory()
click to toggle source
# File lib/shoot/scenario.rb, line 93 def directory ".screenshots/#{platform_name.to_s.gsub(" ", "_")}/#{self.class.name}/#{@current_method}".tap do |dir| unless Dir.exist?(dir) require 'fileutils' FileUtils::mkdir_p dir end end end
shoot(label)
click to toggle source
# File lib/shoot/scenario.rb, line 102 def shoot(label) save_screenshot("#{directory}/#{label}.png", full: true) rescue => e File.write("#{directory}/#{label}.error.txt", %(#{e.inspect}\n\n#{e.backtrace.join("\n")})) end