class Applitools::Selenium::DomSnapshotScript::RecursiveSnapshotter
Constants
- POLL_INTERVAL_MS
Attributes
cross_origin_rendering[RW]
driver[RW]
script[RW]
should_skip_failed_frames[RW]
Public Class Methods
new(driver, script, cross_origin_rendering, use_cookies)
click to toggle source
# File lib/applitools/selenium/visual_grid/dom_snapshot_script.rb, line 101 def initialize(driver, script, cross_origin_rendering, use_cookies) self.should_skip_failed_frames = true self.driver = driver self.script = script self.cross_origin_rendering = cross_origin_rendering self.use_cookies = use_cookies end
Public Instance Methods
create_cross_frames_dom_snapshots()
click to toggle source
# File lib/applitools/selenium/visual_grid/dom_snapshot_script.rb, line 109 def create_cross_frames_dom_snapshots dom = create_dom_snapshot_threaded process_dom_snapshot_frames dom dom end
create_dom_snapshot_threaded()
click to toggle source
# File lib/applitools/selenium/visual_grid/dom_snapshot_script.rb, line 115 def create_dom_snapshot_threaded script.run end
process_dom_snapshot_frames(dom)
click to toggle source
# File lib/applitools/selenium/visual_grid/dom_snapshot_script.rb, line 119 def process_dom_snapshot_frames dom dom["cookies"] = driver.manage.all_cookies if use_cookies dom["frames"].each do |frame| selector = frame['selector'] unless selector Applitools::EyesLogger.warn "inner frame with null selector" next end begin original_frame_chain = driver.frame_chain frame_element = driver.find_element(:css, selector) frame_src = frame_element.attribute('src') Applitools::EyesLogger.info "process_dom_snapshot_frames src = #{frame_src}" driver.switch_to.frame(frame_element) process_dom_snapshot_frames frame driver.switch_to.default_content unless original_frame_chain.empty? driver.switch_to.frames frame_chain: original_frame_chain end rescue StandardError => e Applitools::EyesLogger.error e.class.to_s Applitools::EyesLogger.error e.message if should_skip_failed_frames Applitools::EyesLogger.warn "failed switching to frame #{selector}" else raise ::Applitools::EyesError.new 'failed switching to frame' end end end self.snapshot_and_process_cors_frames(dom) if self.cross_origin_rendering end
snapshot_and_process_cors_frames(dom)
click to toggle source
# File lib/applitools/selenium/visual_grid/dom_snapshot_script.rb, line 155 def snapshot_and_process_cors_frames(dom) dom["crossFrames"].each do |frame| selector = frame['selector'] unless selector Applitools::EyesLogger.warn "cross frame with null selector" next end frame_index = frame['index'] begin original_frame_chain = driver.frame_chain frame_element = driver.find_element(:css, selector) # frame_src = frame_element.attribute('src') Applitools::EyesLogger.info "snapshot_and_process_cors_frames src = #{frame_src}" driver.switch_to.frame(frame_element) frame_dom = create_cross_frames_dom_snapshots dom['frames'] ||= [] dom['frames'].push frame_dom frame_url = frame_dom['url'] dom['cdt'][frame_index]['attributes'].push({ 'name' => 'data-applitools-src', 'value' => frame_url }) Applitools::EyesLogger.info "Created cross origin frame snapshot #{frame_url}" process_dom_snapshot_frames frame_dom driver.switch_to.default_content unless original_frame_chain.empty? driver.switch_to.frames(frame_chain: original_frame_chain) end rescue StandardError => e Applitools::EyesLogger.error e.class.to_s Applitools::EyesLogger.error e.message if should_skip_failed_frames Applitools::EyesLogger.warn "failed extracting and processing cross frame #{selector}" else raise ::Applitools::EyesError.new 'failed switching to frame' end end end end