class Applitools::Selenium::VisualGridEyes
Constants
- USE_DEFAULT_MATCH_TIMEOUT
Attributes
api_key[RW]
compare_with_parent_branch[RW]
config[RW]
current_config[RW]
current_url[RW]
debug_screenshots[RW]
disabled[RW]
dont_get_title[RW]
driver[RW]
driver_lock[RW]
enable_patterns[RW]
fetched_cache_map[RW]
opened[RW]
proxy[RW]
region_to_check[RW]
runner[RW]
save_failed_tests[RW]
scale_ratio[RW]
server_url[RW]
size_mod[RW]
stitching_overlap[RW]
test_list[RW]
test_uuid[RW]
universal_driver[RW]
universal_eyes[RW]
utils[RW]
visual_grid_manager[RW]
Public Class Methods
environment_sdk()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 56 def self.environment_sdk { name: :eyes_selenium, currentVersion: Applitools::EyesSelenium::VERSION } end
new(visual_grid_manager, server_url = nil)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 41 def initialize(visual_grid_manager, server_url = nil) ensure_config @server_connector = Applitools::Connectivity::ServerConnector.new(server_url) @server_connector.obtain_agent_id do full_agent_id end self.server_url = server_url if server_url self.visual_grid_manager = visual_grid_manager self.test_list = Applitools::Selenium::TestList.new self.opened = false self.test_list ||= Applitools::Selenium::TestList.new self.driver_lock = Mutex.new self.utils = Applitools::Utils::EyesSeleniumUtils end
Public Instance Methods
abort_async()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 399 def abort_async test_list.each(&:abort) universal_sdk_abort end
abort_if_not_closed()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 404 def abort_if_not_closed self.opened = false test_list.each(&:abort) universal_sdk_abort end
Also aliased as: abort
add_mouse_trigger(_mouse_action, _element)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 473 def add_mouse_trigger(_mouse_action, _element); end
add_text_trigger(_control, _text)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 475 def add_text_trigger(_control, _text); end
check(*args)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 144 def check(*args) args.compact! case (first_arg = args.shift) when String tag = first_arg target = args.shift when Applitools::Selenium::Target target = first_arg when Hash target = first_arg[:target] tag = first_arg[:name] || first_arg[:tag] end render_task = nil target.default_full_page_for_vg return universal_check(tag, target) target_to_check = target.finalize begin check_in_frame(target_frames: target_to_check.frames) do sleep wait_before_screenshots Applitools::EyesLogger.info 'Trying to get DOM snapshot...' begin dont_fetch_resources = self.dont_fetch_resources enable_cross_origin_rendering = self.enable_cross_origin_rendering use_cookies = !self.dont_use_cookies urls_to_skip = visual_grid_manager.resource_cache.urls_to_skip dom_script = Applitools::Selenium::DomSnapshotScript.new driver script_dom = dom_script.create_dom_snapshot( dont_fetch_resources, urls_to_skip, enable_cross_origin_rendering, use_cookies ) rescue StandardError => e Applitools::EyesLogger.error e.class.to_s Applitools::EyesLogger.error e.message raise ::Applitools::EyesError.new 'Error while getting dom snapshot!' end Applitools::EyesLogger.info 'Done!' mod = Digest::SHA2.hexdigest(script_dom.to_s) region_x_paths = get_regions_x_paths(target_to_check) render_task = RenderTask.new( "Render #{config.short_description} - #{tag}", script_dom, visual_grid_manager, server_connector, region_x_paths, size_mod, region_to_check, target_to_check.options[:script_hooks], config.rendering_grid_force_put, self.utils.user_agent(driver), visual_grid_options.merge(target_to_check.options[:visual_grid_options]), mod ) end if size_mod == 'selector' || size_mod == 'full-selector' target_to_check.convert_coordinates(&Applitools::Selenium::VgMatchWindowData::CONVERT_COORDINATES) end title = begin driver.title rescue StandardError => e logger.warn "failed (#{e.message})" '' end test_list.select { |t| t.test_uuid == test_uuid }.each do |t| t.check(tag, target_to_check, render_task, title) end test_list.each(&:becomes_not_rendered) visual_grid_manager.enqueue_render_task render_task rescue StandardError => e test_list.each(&:becomes_tested) Applitools::EyesLogger.error e.class.to_s Applitools::EyesLogger.error e.message end end
close(throw_exception = true)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 331 def close(throw_exception = true) logger.info "close(#{throw_exception})" logger.info 'Ending server session...' raise Applitools::EyesNotOpenException.new 'Eyes not open' unless open? universal_results = universal_eyes.close # Array even for one test self.opened = false all_results = get_results(throw_exception) # universal_results = universal_eyes.eyes_get_results # Array even for one test # # require 'pry' # # binding.pry # raise Applitools::EyesError.new("Request failed: #{universal_results[:message]}") if server_error?(universal_results) # results = universal_results.map {|result| Applitools::TestResults.new(result) } # # results = results.first if results.size == 1 # # session_results_url = results.url # all_results = results.compact # return false if test_list.empty? # close_async # # until (states = test_list.map(&:state_name).uniq).count == 1 && states.first == :completed # sleep 0.5 # end # self.opened = false # # test_list.select { |t| t.pending_exceptions && !t.pending_exceptions.empty? }.each do |t| # t.pending_exceptions.each do |e| # raise e # end # end # # all_results = test_list.map(&:test_result).compact # failed_results = all_results.select { |r| !r.as_expected? } # # if throw_exception # all_results.each do |r| # raise Applitools::NewTestError.new new_test_error_message(r), r if r.new? # raise Applitools::DiffsFoundError.new diffs_found_error_message(r), r if r.unresolved? && !r.new? # raise Applitools::TestFailedError.new test_failed_error_message(r), r if r.failed? # end # end # failed_results.empty? ? all_results.first : failed_results.first all_results.first end
close_async()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 326 def close_async # test_list.each(&:close) close(false) end
collect_selenium_regions(target)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 244 def collect_selenium_regions(target) selenium_regions = {} target_element = target.region_to_check setup_size_mode(target_element, target, :none) target.ignored_regions.each do |r| selenium_regions[element_or_region(r, target, :ignore)] = :ignore end target.floating_regions.each do |r| selenium_regions[element_or_region(r, target, :floating)] = :floating end target.layout_regions.each do |r| selenium_regions[element_or_region(r, target, :layout_regions)] = :layout end target.strict_regions.each do |r| selenium_regions[element_or_region(r, target, :strict_regions)] = :strict end target.content_regions.each do |r| selenium_regions[element_or_region(r, target, :content_regions)] = :content end target.accessibility_regions.each do |r| case (r = element_or_region(r, target, :accessibility_regions)) when Array r.each do |rr| selenium_regions[rr] = :accessibility end else selenium_regions[r] = :accessibility end end selenium_regions[region_to_check] = :target if size_mod == 'selector' || size_mod == 'full-selector' selenium_regions end
configuration()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 461 def configuration config.deep_dup end
Also aliased as: get_configuration
configuration=(value)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 465 def configuration=(value) Applitools::ArgumentGuard.is_a?(value, :configuration, Applitools::Selenium::Configuration) self.config = value.deep_dup end
Also aliased as: set_configuration
configure() { |config| ... }
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 72 def configure return unless block_given? yield(config) nil end
disabled=(value)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 477 def disabled=(value) @disabled = Applitools::Utils.boolean_value value end
disabled?()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 481 def disabled? @disabled end
element_or_region(target_element, target, options_key)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 310 def element_or_region(target_element, target, options_key) if target_element.respond_to?(:call) region, padding_proc = target_element.call(driver, true) case region when Array regions_to_replace = region.map { |r| Applitools::Selenium::VGRegion.new(r, padding_proc) } target.replace_region(target_element, regions_to_replace, options_key) else target.replace_region(target_element, Applitools::Selenium::VGRegion.new(region, padding_proc), options_key) end region else target_element end end
ensure_config()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 63 def ensure_config self.config = Applitools::Selenium::Configuration.new self.send_dom = true end
eyes_connector()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 136 def eyes_connector logger.info('Creating VisualGridEyes server connector') ::Applitools::Selenium::EyesConnector.new(server_url, driver_lock: driver_lock).tap do |connector| connector.batch = batch connector.config = config.deep_clone end end
full_agent_id()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 68 def full_agent_id "eyes.selenium.visualgrid.ruby/#{Applitools::VERSION}" end
get_all_test_results()
click to toggle source
rubocop:disable Style/AccessorMethodName
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 417 def get_all_test_results test_list.map(&:test_result) end
get_regions_x_paths(target)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 230 def get_regions_x_paths(target) result = [] collect_selenium_regions(target).each do |el, v| next unless [::Selenium::WebDriver::Element, Applitools::Selenium::Element].include?(el.class) xpath = driver.execute_script(Applitools::Selenium::Scripts::GET_ELEMENT_XPATH_JS, el) web_element_region = Applitools::Selenium::WebElementRegion.new(xpath, v) self.region_to_check = web_element_region.dup if v == :target && (size_mod == 'selector' || size_mod == 'full-selector') result << web_element_region target.regions[el] = result.size - 1 end result end
get_results(throw_exception = true)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 378 def get_results(throw_exception = true) logger.info "get_results(#{throw_exception})" logger.info 'Getting results...' universal_results = universal_eyes.eyes_get_results # Array even for one test # require 'pry' # binding.pry raise Applitools::EyesError.new("Request failed: #{universal_results[:message]}") if server_error?(universal_results) results = universal_results.map {|result| Applitools::TestResults.new(result) } all_results = results.compact if throw_exception all_results.each do |r| raise Applitools::NewTestError.new new_test_error_message(r), r if r.new? raise Applitools::DiffsFoundError.new diffs_found_error_message(r), r if r.unresolved? && !r.new? raise Applitools::TestFailedError.new test_failed_error_message(r), r if r.failed? end end all_results end
get_viewport_size(web_driver = driver)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 123 def get_viewport_size(web_driver = driver) Applitools::ArgumentGuard.not_nil 'web_driver', web_driver # self.utils.extract_viewport_size(driver) driver_config_json = universal_driver_config(web_driver) Applitools::EyesLogger.debug 'extract_viewport_size()' viewport_size = runner.universal_client.core_get_viewport_size(driver_config_json) result = Applitools::RectangleSize.new viewport_size[:width], viewport_size[:height] Applitools::EyesLogger.debug "Viewport size is #{result}." result end
open(*args)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 78 def open(*args) # visual_grid_manager.add_batch(batch.id) { visual_grid_manager.close_batch(batch.id) } # self.test_uuid = SecureRandom.uuid options = Applitools::Utils.extract_options!(args) universal_open(options) # Applitools::ArgumentGuard.hash(options, 'options', [:driver]) # # config.app_name = options[:app_name] if options[:app_name] # config.test_name = options[:test_name] if options[:test_name] # config.agent_run_id = "#{config.test_name}--#{SecureRandom.hex(10)}" # # if config.viewport_size.nil? || config.viewport_size && config.viewport_size.empty? # config.viewport_size = Applitools::RectangleSize.from_any_argument(options[:viewport_size]) if options[:viewport_size] # end # # self.driver = Applitools::Selenium::SeleniumEyes.eyes_driver(options.delete(:driver), self) # self.current_url = driver.current_url # # if viewport_size # set_viewport_size(viewport_size) # else # self.viewport_size = get_viewport_size # end # # visual_grid_manager.open(self) # visual_grid_manager.add_batch(batch.id) do # server_connector.close_batch(batch.id) # end # # logger.info('Getting all browsers info...') # browsers_info_list = config.browsers_info # logger.info('Creating test descriptors for each browser info...') # browsers_info_list.each(viewport_size) do |bi| # test = Applitools::Selenium::RunningTest.new(eyes_connector, bi, driver).tap do |t| # t.on_results_received do |results| # visual_grid_manager.aggregate_result(results) # end # t.test_uuid = test_uuid # end # test_list.push test # end # self.opened = true # driver end
open?()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 412 def open? opened end
server_connector()
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 454 def server_connector @server_connector.server_url = config.server_url @server_connector.api_key = config.api_key @server_connector.proxy = config.proxy if config.proxy @server_connector end
set_viewport_size(value)
click to toggle source
rubocop:disable Style/AccessorMethodName
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 423 def set_viewport_size(value) # require('pry') # binding.pry self.utils.set_viewport_size driver, value rescue => e logger.error e.class.to_s logger.error e.message raise Applitools::TestFailedError.new "#{e.class} - #{e.message}" end
setup_size_mode(target_element, target, key)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 278 def setup_size_mode(target_element, target, key) self.size_mod = 'full-page' element_or_region = element_or_region(target_element, target, key) self.size_mod = case element_or_region when ::Selenium::WebDriver::Element, Applitools::Selenium::Element if target.options[:stitch_content] 'full-selector' else 'selector' end when Applitools::Region if element_or_region == Applitools::Region::EMPTY if target.options[:stitch_content] 'full-page' else element_or_region = Applitools::Region.from_location_size( Applitools::Location::TOP_LEFT, viewport_size ) 'region' end else 'region' end else 'full-page' end self.region_to_check = element_or_region end
Private Instance Methods
diffs_found_error_message(result)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 441 def diffs_found_error_message(result) original_results = result.original_results "Test '#{original_results['name']}' " \ "of '#{original_results['appname']}' " \ "detected differences! See details at #{original_results['appUrls']['session']}" end
ensure_frame_visible(*_args)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 489 def ensure_frame_visible(*_args); end
new_test_error_message(result)
click to toggle source
rubocop:enable Style/AccessorMethodName
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 434 def new_test_error_message(result) original_results = result.original_results "New test '#{original_results['name']}' " \ "of '#{original_results['appName']}' " \ "Please approve the baseline at #{original_results['appUrls']['session']} " end
reset_frames_scroll_position(*_args)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 491 def reset_frames_scroll_position(*_args); end
test_failed_error_message(result)
click to toggle source
# File lib/applitools/selenium/visual_grid/visual_grid_eyes.rb, line 448 def test_failed_error_message(result) original_results = result.original_results "Test '#{original_results['name']}' of '#{original_results['appName']}' " \ "is failed! See details at #{original_results['appUrls']['session']}" end