module WatirSession

Attributes

browser[R]
watir_config[W]

Public Instance Methods

after_browser(*args) click to toggle source
# File lib/watir_session/watir_session.rb, line 112
def after_browser(*args)
  execute_hook :after_browser, *args
end
after_each(*args) click to toggle source
# File lib/watir_session/watir_session.rb, line 102
def after_each(*args)
  execute_hook :after_each, *args

  take_screenshot(*args) unless watir_config.take_screenshots == :never

  quit_browser unless watir_config.reuse_browser

  after_browser(*args)
end
after_suite(*args) click to toggle source
# File lib/watir_session/watir_session.rb, line 121
def after_suite(*args)
  quit_browser if watir_config.reuse_browser

  execute_hook :after_suite, *args
end
before_browser(*args) click to toggle source
# File lib/watir_session/watir_session.rb, line 66
def before_browser(*args)
  execute_hook :before_browser, *args
end
before_each(*args) click to toggle source
# File lib/watir_session/watir_session.rb, line 86
  def before_each(*args)
    if watir_config.reuse_browser && browser.nil
      raise StandardError, "#before_tests method must be set in order to use
the #reuse_browser configuration setting"
    end

    before_browser(*args)

    @browser = create_browser(*args) unless watir_config.reuse_browser
    @browser.window.maximize if watir_config.maximize_browser

    execute_hook :before_each, *args

    @browser
  end
before_suite(*args) click to toggle source
# File lib/watir_session/watir_session.rb, line 60
def before_suite(*args)
  create_browser if watir_config.reuse_browser

  execute_hook :before_suite, *args
end
configure_watir() click to toggle source
# File lib/watir_session/watir_session.rb, line 153
def configure_watir
  Watir.default_timeout = watir_config.watir_timeout
end
create_browser(*args) click to toggle source
# File lib/watir_session/watir_session.rb, line 70
def create_browser(*args)
  use_headless_display if watir_config.headless

  @browser = execute_hook(:create_browser, *args).compact.first
  return @browser if @browser

  if args.empty?
    http_client = Selenium::WebDriver::Remote::Http::Default.new
    http_client.timeout = watir_config.http_timeout
    @browser = Watir::Browser.new(watir_config.browser,
                                  http_client: http_client)
  else
    @browser = Watir::Browser.new *args
  end
end
create_configurations() click to toggle source
# File lib/watir_session/watir_session.rb, line 16
def create_configurations
  spec_path = $LOAD_PATH.select { |path| path =~ /\/spec$/ }.first
  config_path = spec_path.gsub('spec', 'config')

  return unless Dir.exist?(config_path)
  Dir.entries(config_path).select { |file| file =~ /\.yml$/ }.each do |yaml|
    config_name = yaml.gsub('.yml', '')
    next unless Object.const_defined?("#{config_name.capitalize}Config")
    load_yml(config_path, config_name)
  end
end
custom_config() click to toggle source
# File lib/watir_session/watir_session.rb, line 12
def custom_config
  @custom_config ||= CustomConfig.new
end
execute_hook(method, *args) click to toggle source
# File lib/watir_session/watir_session.rb, line 45
def execute_hook(method, *args)
  sessions = registered_sessions.select do |session|
    session.public_methods(false).include? method
  end

  sessions.each_with_object([]) do |session, array|
    array << session.send(method, *args)
  end
end
load_yml(config_path, config_name) click to toggle source
# File lib/watir_session/watir_session.rb, line 28
def load_yml(config_path, config_name)
  config = YAML.load_file("#{config_path}/#{config_name}.yml")
  if config.values.all? { |v| v.is_a? Hash } && custom_config.respond_to?(config_name.singularize)
    config = config[custom_config.send(config_name.singularize)]
  end
  obj = Object.const_get("#{config_name.capitalize}Config").new(config)
  custom_config.send("#{config_name.singularize}=", obj)
end
quit_browser() click to toggle source
# File lib/watir_session/watir_session.rb, line 127
def quit_browser
  if @headless
    @headless.destroy
    @headless = nil
  end

  return if @browser.nil?

  @browser.quit
  @browser = nil
end
register_session(session) click to toggle source
# File lib/watir_session/watir_session.rb, line 41
def register_session(session)
  registered_sessions << session
end
registered_sessions() click to toggle source
# File lib/watir_session/watir_session.rb, line 37
def registered_sessions
  @registered_sessions ||= []
end
reset_config!() click to toggle source
# File lib/watir_session/watir_session.rb, line 144
def reset_config!
  @watir_config = nil
  @custom_config = nil
end
reset_registered_sessions!() click to toggle source
# File lib/watir_session/watir_session.rb, line 149
def reset_registered_sessions!
  @registered_sessions = nil
end
restart_browser!() click to toggle source
# File lib/watir_session/watir_session.rb, line 139
def restart_browser!
  quit_browser
  create_browser
end
start() click to toggle source
# File lib/watir_session/watir_session.rb, line 55
def start
  configure_watir
  create_configurations
end
take_screenshot(*args) click to toggle source
# File lib/watir_session/watir_session.rb, line 116
def take_screenshot(*args)
  screenshot = execute_hook(:take_screenshot, *args).compact
  browser.screenshot.save("screenshot.png") if screenshot.nil?
end
use_headless_display() click to toggle source
# File lib/watir_session/watir_session.rb, line 157
def use_headless_display
  unless RbConfig::CONFIG['host_os'].match('linux')
    warn "Headless only supported on Linux"
    return
  end
  require 'headless'
  @headless = Headless.new
  @headless.start
end
watir_config() click to toggle source
# File lib/watir_session/watir_session.rb, line 8
def watir_config
  @watir_config ||= WatirConfig.new
end