class Applitools::Eyes

Override create driver to inject into capybara’s driver

Constants

AGENT_ID
DEFAULT_MATCH_TIMEOUT

Attributes

config[RW]
aborted[RW]
agent_connector[R]
app_name[RW]
branch_name[RW]
disabled[R]
driver[RW]
failure_reports[RW]
host_app[RW]
host_os[RW]
is_open[RW]
match_level[RW]
match_timeout[RW]
match_window_task[RW]
parent_branch_name[RW]
session[RW]
session_start_info[RW]
should_match_window_run_once_on_timeout[RW]
test_batch[RW]
test_name[RW]
viewport_size[RW]

Public Class Methods

new(params={}) click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 24
def initialize(params={})
  raise "Please supply an apikey: Eyes.config[:apikey] = ..." unless config[:apikey]

  @disabled = params[:disabled]

  @driver = create_driver(params)
  return if disabled?

  @agent_connector = Applitools::AgentConnector.new(config[:server_url], config[:user], config[:apikey])
  @match_timeout = DEFAULT_MATCH_TIMEOUT
  @failure_reports = Applitools::FailureReports::ON_CLOSE
end

Public Instance Methods

abort_if_not_closed() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 132
def abort_if_not_closed
  return if disabled?
  self.is_open = false
  if session
    begin
      agent_connector.stop_session(session,true)
    rescue Applitools::EyesError => e
      EyesLogger.info "Failed to abort server session -> #{e.message} "
    ensure
      self.session = nil
    end
  end
end
check_window(tag) click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 64
def check_window(tag)
  return if disabled?
  raise Applitools::EyesError.new("Eyes not open") if !open?
  if !session
    start_session
    self.match_window_task = Applitools::MatchWindowTask.new(agent_connector, session, driver, match_timeout)
  end

  as_expected = match_window_task.match_window(tag, should_match_window_run_once_on_timeout)
  if !as_expected
    self.should_match_window_run_once_on_timeout = true
    if !session.new_session?
      #EyesLogger.info %( "mismatch! #{ tag ? "" : "(#{tag})" } )
      if failure_reports.to_i == Applitools::FailureReports::IMMEDIATE
        raise Applitools::TestFailedError.new("Mismatch found in '#{start_info.scenario_id_or_name}'"\
                                              " of '#{start_info.app_id_or_name}'")
      end
    end
  end
end
close() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 85
def close
  return if disabled?
  self.is_open = false
  return Applitools::TestResults.new if !session

  session_results_url = session.url
  results = agent_connector.stop_session(session,false)
  new_session = session.new_session?
  self.session = nil

  if new_session
    instructions = "Please approve the new baseline at #{session_results_url}"
    EyesLogger.info "--- New test ended.  #{instructions}"
    message = "' #{session_start_info.scenario_id_or_name} of"\
              " #{session_start_info.app_id_or_name}. #{instructions}"
    raise Applitools::NewTestError.new(message, results)
  elsif 0 < results.mismatches || 0 < results.missing 
    EyesLogger.info "--- Failed test ended. See details at #{session_results_url}"
    message = "' #{session_start_info.scenario_id_or_name} of"\
              " #{session_start_info.app_id_or_name}'. See details at #{session_results_url}"
    raise Applitools::TestFailedError.new(message, results)
  end

  EyesLogger.info "--- Test passed. See details at #{session_results_url}"
end
config() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 20
def config
  self.class.config
end
create_driver(params) click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 37
def create_driver(params)
  Applitools::Driver.new(browser: params.fetch(:browser, nil))
end
open(params={}) click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 41
def open(params={})
  return driver if disabled?

  if open?
    abort_if_not_closed
    msg = 'a test is alread running'
    EyesLogger.info(msg) and raise Applitools::EyesError.new(msg)
  end

  self.app_name = params.fetch(:app_name)
  self.failure_reports = params.fetch(:failure_reports, self.failure_reports)
  self.match_level = params.fetch(:match_level,MatchLevel::EXACT)
  self.test_name = params.fetch(:test_name)
  self.viewport_size = params.fetch(:viewport_size, nil)

  self.is_open = true
  driver
end
open?() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 60
def open?
  self.is_open
end
test(params={}) { |self, driver| ... } click to toggle source
# File lib/eyes_selenium_ruby/capybara.rb, line 5
def test(params={}, &block)
  begin
    previous_driver = Capybara.current_driver
    previous_browser = Capybara.current_session.driver.instance_variable_get(:@browser)
    Capybara.current_driver = :selenium
    Capybara.current_session.driver.instance_variable_set(:@browser, driver)
    open(params)
    yield(self, driver)
    close
  rescue Applitools::EyesError
  ensure 
    abort_if_not_closed
    Capybara.current_session.driver.instance_variable_set(:@browser, previous_browser)
    Capybara.current_driver = previous_driver
  end
end

Private Instance Methods

assign_viewport_size() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 169
def assign_viewport_size
  if viewport_size?
    self.viewport_size = Applitools::ViewportSize.new(driver, viewport_size)
    self.viewport_size.set
  else
    self.viewport_size =  Applitools::ViewportSize.new(driver).extract_viewport_from_browser!
  end
end
disabled?() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 148
def disabled? 
  disabled
end
start_session() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 152
def start_session
  assign_viewport_size
  test_batch ||= Applitools::BatchInfo.new
  app_env = Applitools::Environment.new(host_os, host_app, viewport_size)
  application = driver.create_application
  self.session_start_info = Applitools::StartInfo.new(AGENT_ID,
    app_name, test_name, test_batch, app_env, application, 
    match_level,nil, branch_name, parent_branch_name
  )
  self.session = agent_connector.start_session(session_start_info)
  self.should_match_window_run_once_on_timeout = session.new_session?
end
to_hash() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 178
def to_hash
  Hash[dimension.each_pair.to_a]
end
viewport_size?() click to toggle source
# File lib/eyes_selenium_ruby/eyes/eyes.rb, line 165
def viewport_size?
  self.viewport_size
end