Class: Applitools::Appium::Eyes

Inherits:
Selenium::SeleniumEyes
  • Object
show all
Defined in:
lib/applitools/appium/eyes.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Eyes

Returns a new instance of Eyes.



11
12
13
14
15
16
17
18
# File 'lib/applitools/appium/eyes.rb', line 11

def initialize(*args)
  super
  self.dont_get_title = true
  self.runner = Applitools::ClassicRunner.new unless runner
  self.base_agent_id = "eyes.appium.ruby/#{Applitools::EyesAppium::VERSION}".freeze
  self.status_bar_height = 0
  self.utils = Applitools::Appium::Utils
end

Instance Attribute Details

#status_bar_heightObject

Returns the value of attribute status_bar_height.



4
5
6
# File 'lib/applitools/appium/eyes.rb', line 4

def status_bar_height
  @status_bar_height
end

Class Method Details

.environment_sdkObject



20
21
22
23
24
25
# File 'lib/applitools/appium/eyes.rb', line 20

def self.environment_sdk
  {
    name: :eyes_appium,
    currentVersion: Applitools::EyesAppium::VERSION
  }
end

.set_mobile_capabilities(caps, api_key = nil, server_url = nil, proxy = nil) ⇒ Object Also known as: set_nmg_capabilities

Raises:

  • (Applitools::EyesError)


130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/applitools/appium/eyes.rb', line 130

def self.set_mobile_capabilities(caps, api_key = nil, server_url = nil, proxy = nil)
  api_key ||= ENV['APPLITOOLS_API_KEY']
  raise Applitools::EyesError.new('No API key was given, or is an empty string.') if api_key.to_s.empty?

  server_url ||= ENV['APPLITOOLS_SERVER_URL']
  proxy ||= ENV['APPLITOOLS_HTTP_PROXY']

  new_caps = {
    APPLITOOLS_API_KEY: api_key,
    APPLITOOLS_SERVER_URL: server_url,
    APPLITOOLS_PROXY_URL: proxy
  }.compact # Removes nil values

  # Ensure `caps` is a hash to avoid NoMethodError for []= on nil
  caps ||= {}

  caps[:optionalIntentArguments] = "--es APPLITOOLS '#{new_caps.to_json}'"
  caps[:processArguments] = {
    args: [],
    env: new_caps.merge(DYLD_INSERT_LIBRARIES: "@executable_path/Frameworks/UFG_lib.xcframework/ios-arm64/UFG_lib.framework/UFG_lib:@executable_path/Frameworks/UFG_lib.xcframework/ios-arm64_x86_64-simulator/UFG_lib.framework/UFG_lib")
  }
end

Instance Method Details

#capture_screenshotObject



79
80
81
82
83
84
85
86
87
# File 'lib/applitools/appium/eyes.rb', line 79

def capture_screenshot
  logger.info 'Getting screenshot (capture_screenshot() has been invoked)'
  case eyes_element_to_check
  when Applitools::Region
    viewport_screenshot
  when Selenium::WebDriver::Element, Applitools::Selenium::Element
    element_screenshot
  end
end

#check(*args) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/applitools/appium/eyes.rb', line 29

def check(*args)
  args.compact!
  case (first_arg = args.shift)
  when String
    name = first_arg
    target = args.shift
  when Applitools::Selenium::Target
    target = first_arg
  when Hash
    target = first_arg[:target]
    name = first_arg[:name] || first_arg[:tag]
  end

  logger.info "check(#{name}) is called"
  self.tag_for_debug = name
  Applitools::ArgumentGuard.one_of? target, 'target', [Applitools::Selenium::Target, Applitools::Appium::Target]

  # target.fully(false) if target.options[:stitch_content].nil?

  return universal_check(name, target)
  return check_native(name, target) if native_app?
  super
end

#check_native(name, target) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/applitools/appium/eyes.rb', line 56

def check_native(name, target)
  logger.info "check_native(#{name}) is called"
  update_scaling_params
  target_to_check = target.finalize
  match_data = Applitools::MatchWindowData.new(default_match_settings)
  match_data.tag = name
  timeout = target_to_check.options[:timeout] || USE_DEFAULT_MATCH_TIMEOUT

  eyes_element = target_to_check.region_to_check.call(driver)
  self.eyes_element_to_check = eyes_element
  region_provider = region_provider_class.new(driver, eyes_element)
  match_data.read_target(target_to_check, driver)

  check_window_base(
    region_provider, timeout, match_data
  )
end

#check_region(*args) ⇒ Object



124
125
126
127
128
# File 'lib/applitools/appium/eyes.rb', line 124

def check_region(*args)
  options = { timeout: USE_DEFAULT_MATCH_TIMEOUT, tag: nil }.merge! Applitools::Utils.extract_options!(args)
  target = Applitools::Appium::Target.new.region(*args).timeout(options[:match_timeout])
  check(options[:tag], target)
end

#check_window(tag = nil, match_timeout = USE_DEFAULT_MATCH_TIMEOUT) ⇒ Object



117
118
119
120
121
122
# File 'lib/applitools/appium/eyes.rb', line 117

def check_window(tag = nil, match_timeout = USE_DEFAULT_MATCH_TIMEOUT)
  target = Applitools::Appium::Target.window.tap do |t|
    t.timeout(match_timeout)
  end
  check(tag, target)
end

#dom_dataObject



113
114
115
# File 'lib/applitools/appium/eyes.rb', line 113

def dom_data
  {}
end

#get_app_output_with_screenshot(*args) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/applitools/appium/eyes.rb', line 89

def get_app_output_with_screenshot(*args)
  result = super do |screenshot|
    if scale_provider
      scaled_image = scale_provider.scale_image(screenshot.image)
      self.screenshot = screenshot_class.new(
        Applitools::Screenshot.from_image(
          case scaled_image
          # when ChunkyPNG::Image
          #   scaled_image
          when Applitools::Screenshot::Datastream
            scaled_image.image
          else
            raise Applitools::EyesError.new('Unknown image format after scale!')
          end
        ),
        status_bar_height: self.utils.status_bar_height(driver),
        device_pixel_ratio: self.utils.device_pixel_ratio(driver)
      )
    end
  end
  self.screenshot_url = nil
  result
end

#native_app?Boolean

Returns:

  • (Boolean)


74
75
76
77
# File 'lib/applitools/appium/eyes.rb', line 74

def native_app?
  return true if driver.current_context == 'NATIVE_APP'
  false
end

#use_system_screenshot(value = true) ⇒ Object



157
158
159
160
# File 'lib/applitools/appium/eyes.rb', line 157

def use_system_screenshot(value = true)
  self.screenshot_mode = !value ? 'applitools-lib' : 'default'
  self
end