Module: Appom

Extended by:
Logging
Includes:
Logging
Defined in:
lib/appom.rb,
lib/appom/logging.rb,
lib/appom/version.rb,
lib/appom/exceptions.rb,
lib/appom/element_cache.rb

Overview

Configuration for element caching

Defined Under Namespace

Modules: Configuration, ElementCache, ElementContainer, ElementFinder, ElementState, ElementValidation, Helpers, Logging, Performance, Retry, Screenshot, SmartWait, Visual Classes: AppomError, ArgumentError, ConfigurationError, DriverError, DriverNotInitializedError, DriverOperationError, ElementError, ElementNotFoundError, ElementStateError, InvalidElementError, InvalidSectionError, Page, Section, SectionError, TimeoutError, UnsupportedBlockError, Wait, WaitError

Constant Summary collapse

VERSION =

Current version of the Appom gem

'2.0.0'

Class Attribute Summary collapse

Class Method Summary collapse

Methods included from Logging

level, level=, log_debug, log_element_action, log_error, log_info, log_wait_end, log_wait_start, log_warn, logger

Class Attribute Details

.cache_configObject

Returns the value of attribute cache_config.



355
356
357
# File 'lib/appom/element_cache.rb', line 355

def cache_config
  @cache_config
end

.driverObject

Returns the value of attribute driver.



78
79
80
# File 'lib/appom.rb', line 78

def driver
  @driver
end

.max_wait_timeObject

Returns the value of attribute max_wait_time.



78
79
80
# File 'lib/appom.rb', line 78

def max_wait_time
  @max_wait_time
end

Class Method Details

.configure {|config| ... } ⇒ Object

Configure appom global settings

Examples:

Configure wait time

Appom.configure do |config|
  config.max_wait_time = 30
end

Yield Parameters:

  • config (self)

    The Appom module for configuration



87
88
89
# File 'lib/appom.rb', line 87

def configure
  yield self
end

.configure_cache(max_size: 50, ttl: 30, enabled: true) ⇒ Object



357
358
359
360
361
362
363
# File 'lib/appom/element_cache.rb', line 357

def configure_cache(max_size: 50, ttl: 30, enabled: true)
  @cache_config = {
    max_size: max_size,
    ttl: ttl,
    enabled: enabled,
  }
end

.configure_logging(level: :info, output: nil, custom_logger: nil) ⇒ Object

Configure logging



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/appom/logging.rb', line 86

def self.configure_logging(level: :info, output: nil, custom_logger: nil)
  if custom_logger
    Logging.logger = custom_logger
  else
    logger = Logger.new(output || $stdout)
    logger.level = case level.to_s.downcase
                   when 'debug' then Logger::DEBUG
                   when 'warn' then Logger::WARN
                   when 'error' then Logger::ERROR
                   when 'fatal' then Logger::FATAL
                   else Logger::INFO # This covers both 'info' and any invalid values
                   end
    logger.formatter = proc do |severity, datetime, _progname, msg|
      # Handle the case where datetime might be mocked as an integer in tests
      timestamp = datetime.respond_to?(:strftime) ? datetime.strftime('%Y-%m-%d %H:%M:%S') : datetime.to_s
      "[#{timestamp}] #{severity.ljust(5)} [Appom] #{msg}\n"
    end
    Logging.logger = logger
  end
end

.element_tracking_summaryObject

Element state tracking convenience methods



219
220
221
# File 'lib/appom.rb', line 219

def element_tracking_summary
  ElementState.tracking_summary
end

.export_element_trackingObject



223
224
225
# File 'lib/appom.rb', line 223

def export_element_tracking(**)
  ElementState.export_data(**)
end

.export_performance_metricsObject



205
206
207
# File 'lib/appom.rb', line 205

def export_performance_metrics(**)
  Performance.export_metrics(**)
end

.generate_visual_reportObject



214
215
216
# File 'lib/appom.rb', line 214

def generate_visual_report(**)
  Visual.generate_report(**)
end

.performance_statsObject

Performance monitoring convenience methods



201
202
203
# File 'lib/appom.rb', line 201

def performance_stats
  Performance.summary
end

.register_driver { ... } ⇒ Appium::Driver

Register a new Appium driver for Appom

Examples:

Register iOS driver

Appom.register_driver do
  options = {
    appium_lib: { server_url: 'http://localhost:4723' },
    caps: { platformName: 'iOS', deviceName: 'iPhone 13' }
  }
  Appium::Driver.new(options, false)
end

Yields:

  • Block that returns an Appium::Driver instance

Raises:



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/appom.rb', line 105

def register_driver(&)
  log_info('Registering Appium driver')

  # Register driver with performance monitoring
  @driver = Performance.time_operation('driver_registration', &)

  setup_exit_handler

  # Initialize element state tracking if enabled
  if Configuration.get('element_state.tracking_enabled', false)
    ElementState.tracker
    log_info('Element state tracking initialized')
  end

  log_info('Appium driver registered successfully')
  @driver
rescue StandardError => e
  log_error('Failed to register driver', { error: e.message })
  raise DriverError, "Failed to register driver: #{e.message}"
end

.reset_driverObject

Reset the device, relaunching the application

Raises:



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/appom.rb', line 152

def reset_driver
  raise DriverNotInitializedError unless @driver

  log_info('Resetting Appium driver')

  # Reset driver with performance monitoring
  Performance.time_operation('driver_reset') do
    @driver.reset
  end

  log_info('Appium driver reset successfully')
rescue DriverNotInitializedError
  raise
rescue StandardError => e
  log_error('Failed to reset driver', { error: e.message })
  raise DriverOperationError.new('reset', e.message)
end

.setup_exit_handlerObject

After run all scenario and exit we will quit driver to close application under test



171
172
173
174
175
176
# File 'lib/appom.rb', line 171

def setup_exit_handler
  main = Process.pid
  at_exit do
    cleanup_on_exit(main)
  end
end

.start_driverObject

Start the registered Appium driver

Raises:



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/appom.rb', line 130

def start_driver
  raise DriverNotInitializedError unless @driver

  log_info('Starting Appium driver')

  # Start driver with performance monitoring
  Performance.time_operation('driver_start') do
    @driver.start_driver
  end

  log_info('Appium driver started successfully')
rescue DriverNotInitializedError
  raise
rescue StandardError => e
  log_error('Failed to start driver', { error: e.message })
  raise DriverOperationError.new('start_driver', e.message)
end

.visual_regression_test(name) ⇒ Object

Visual testing convenience methods



210
211
212
# File 'lib/appom.rb', line 210

def visual_regression_test(name, **)
  Visual.regression_test(name, **)
end