class Applitools::Selenium::ViewportSize
Constants
- BROWSER_SIZE_CALCULATION_RETRIES
- JS_GET_VIEWPORT_SIZE
- VERIFY_RETRIES
- VERIFY_SLEEP_PERIOD
Public Class Methods
new(driver, dimension = nil)
click to toggle source
Initialize a Applitools::Selenium::ViewportSize
instance.
@param [Applitools::Selenium::Driver] driver The driver instance. @param [Applitools::Base::Dimension] dimension The dimension of the viewport size.
# File lib/applitools/selenium/viewport_size.rb, line 34 def initialize(driver, dimension = nil) @driver = driver @dimension = dimension.nil? ? nil : setup_dimension(dimension) end
required_browser_size(options)
click to toggle source
# File lib/applitools/selenium/viewport_size.rb, line 158 def required_browser_size(options) unless options[:actual_browser_size].is_a?(Applitools::Base::Dimension) && options[:actual_viewport_size].is_a?(Applitools::Base::Dimension) && options[:required_viewport_size].is_a?(Applitools::Base::Dimension) raise ArgumentError, "expected #{options.inspect}:#{options.class} to be a hash with keys" \ ' :actual_browser_size, :actual_viewport_size, :required_viewport_size' end options[:actual_browser_size] - options[:actual_viewport_size] + options[:required_viewport_size] end
Public Instance Methods
browser_size()
click to toggle source
# File lib/applitools/selenium/viewport_size.rb, line 98 def browser_size Applitools::Base::Dimension.for @driver.manage.window.size end
browser_to_upper_left_corner()
click to toggle source
# File lib/applitools/selenium/viewport_size.rb, line 106 def browser_to_upper_left_corner @driver.manage.window.position = Selenium::WebDriver::Point.new(0, 0) rescue Selenium::WebDriver::Error::UnsupportedOperationError => e Applitools::EyesLogger.warn "Unsupported operation error: (#{e.message})" end
extract_viewport_size()
click to toggle source
Extract the viewport size.
@return [Applitools::Base::Dimension] The dimensions of the viewport size.
# File lib/applitools/selenium/viewport_size.rb, line 52 def extract_viewport_size width = nil height = nil begin width, height = @driver.execute_script(JS_GET_VIEWPORT_SIZE) rescue => e Applitools::EyesLogger.error "Failed extracting viewport size using JavaScript: (#{e.message})" end if width.nil? || height.nil? Applitools::EyesLogger.info 'Using window size as viewport size.' width, height = *browser_size.values.map(&:ceil) if @driver.landscape_orientation? && height > width width, height = height, width end end Applitools::Base::Dimension.new(width, height) end
Also aliased as: viewport_size, extract_viewport_from_browser
extract_viewport_size!()
click to toggle source
# File lib/applitools/selenium/viewport_size.rb, line 43 def extract_viewport_size! @dimension = extract_viewport_from_browser end
Also aliased as: extract_viewport_from_browser!
resize_browser(other)
click to toggle source
# File lib/applitools/selenium/viewport_size.rb, line 102 def resize_browser(other) @driver.manage.window.size = other end
set()
click to toggle source
Set the viewport size.
# File lib/applitools/selenium/viewport_size.rb, line 77 def set Applitools::EyesLogger.debug "Set viewport size #{@dimension}" # Before resizing the window, set its position to the upper left corner (otherwise, there might not be enough # "space" below/next to it and the operation won't be successful). browser_to_upper_left_corner browser_size_calculation_count = 0 while browser_size_calculation_count < BROWSER_SIZE_CALCULATION_RETRIES unless resize_attempt raise Applitools::TestFailedError.new 'Failed to set browser size!' \ " (current size: #{browser_size})" end browser_size_calculation_count += 1 if viewport_size == size Applitools::EyesLogger.debug "Actual viewport size #{viewport_size}" return end end raise Applitools::TestFailedError.new 'Failed to set viewport size' end
size()
click to toggle source
# File lib/applitools/selenium/viewport_size.rb, line 39 def size @dimension end
to_hash()
click to toggle source
# File lib/applitools/selenium/viewport_size.rb, line 112 def to_hash @dimension.to_hash end
Private Instance Methods
resize_attempt()
click to toggle source
Calculates a necessary browser size to get a requested viewport size, tries to resize browser, yields a block (which should check if an attempt was successful) before each iteration. If the block returns true, stop trying and returns true (resize was successful) Otherwise, returns false after VERIFY_RETRIES
iterations
# File lib/applitools/selenium/viewport_size.rb, line 137 def resize_attempt actual_viewport_size = extract_viewport_size Applitools::EyesLogger.debug "Actual viewport size #{actual_viewport_size}" required_browser_size = ViewportSize.required_browser_size actual_browser_size: browser_size, actual_viewport_size: actual_viewport_size, required_viewport_size: size retries_left = VERIFY_RETRIES until retries_left.zero? return true if browser_size == required_browser_size Applitools::EyesLogger.debug "Trying to set browser size to #{required_browser_size}" resize_browser required_browser_size sleep VERIFY_SLEEP_PERIOD Applitools::EyesLogger.debug "Required browser size #{required_browser_size}, " \ "Current browser size #{browser_size}" retries_left -= 1 end false end
setup_dimension(dimension)
click to toggle source
# File lib/applitools/selenium/viewport_size.rb, line 118 def setup_dimension(dimension) return dimension if dimension.is_a? ::Selenium::WebDriver::Dimension return Applitools::Base::Dimension.for(dimension) if dimension.respond_to?(:width) & dimension.respond_to?(:height) if dimension.is_a?(Hash) && (dimension.keys & [:width, :height]).size == 2 return Applitools::Base::Dimension.new( dimension[:width], dimension[:height] ) end raise ArgumentError, "expected #{@dimension.inspect}:#{@dimension.class} to respond to #width and #height," \ ' or be a hash with these keys.' end