Class: Applitools::ViewportSize

Inherits:
Object
  • Object
show all
Defined in:
lib/eyes_selenium_ruby/eyes/viewport_size.rb

Defined Under Namespace

Classes: Dimension

Constant Summary collapse

GET_VIEWPORT_HEIGHT_JAVASCRIPT_FOR_NORMAL_BROWSER =
"return window.innerHeight"
GET_VIEWPORT_WIDTH_JAVASCRIPT_FOR_NORMAL_BROWSER =
"return window.innerWidth"
DOCUMENT_CLEAR_SCROLL_BARS_JAVASCRIPT =
"var doc = document.documentElement;" +
"var previousOverflow = doc.style.overflow;"
DOCUMENT_RESET_SCROLL_BARS_JAVASCRIPT =
"doc.style.overflow = previousOverflow;"
DOCUMENT_RETURN_JAVASCRIPT =
"return __applitools_result;"
GET_VIEWPORT_WIDTH_JAVASCRIPT_FOR_BAD_BROWSERS =
DOCUMENT_CLEAR_SCROLL_BARS_JAVASCRIPT        +
"var __applitools_result = doc.clientWidth;" +
DOCUMENT_RESET_SCROLL_BARS_JAVASCRIPT        +
DOCUMENT_RETURN_JAVASCRIPT
GET_VIEWPORT_HEIGHT_JAVASCRIPT_FOR_BAD_BROWSERS =
DOCUMENT_CLEAR_SCROLL_BARS_JAVASCRIPT         +
"var __applitools_result = doc.clientHeight;" +
DOCUMENT_RESET_SCROLL_BARS_JAVASCRIPT         +
DOCUMENT_RETURN_JAVASCRIPT

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(driver, dimension = nil) ⇒ ViewportSize

Returns a new instance of ViewportSize.



30
31
32
33
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 30

def initialize(driver, dimension=nil)
  @driver = driver
  @dimension = dimension
end

Instance Attribute Details

#dimensionObject

Returns the value of attribute dimension.



29
30
31
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 29

def dimension
  @dimension
end

#driverObject (readonly)

Returns the value of attribute driver.



28
29
30
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 28

def driver
  @driver
end

Instance Method Details

#browser_sizeObject



98
99
100
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 98

def browser_size
  driver.manage.window.size
end

#browser_size=(other) ⇒ Object



102
103
104
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 102

def browser_size=(other)
  self.driver.manage.window.size = other
end

#extract_viewport_from_browserObject Also known as: viewport_size



59
60
61
62
63
64
65
66
67
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 59

def extract_viewport_from_browser
  width  = extract_viewport_width 
  height = extract_viewport_height
  Dimension.new(width,height)
rescue => e
  EyesLogger.info "getViewportSize(): only window size is available (#{e.message})"
  width, height = *browser_size.values
  Dimension.new(width,height)
end

#extract_viewport_from_browser!Object



55
56
57
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 55

def extract_viewport_from_browser!
  self.dimension = extract_viewport_from_browser
end

#extract_viewport_heightObject



45
46
47
48
49
50
51
52
53
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 45

def extract_viewport_height
   begin
     return driver.execute_script(GET_VIEWPORT_HEIGHT_JAVASCRIPT_FOR_NORMAL_BROWSER)
   rescue  => e 
     EyesLogger.info "getViewportSize(): Browser does not support innerHeight (#{e.message})"
   end

  driver.execute_script(GET_VIEWPORT_WIDTH_JAVASCRIPT_FOR_BAD_BROWSERS)
end

#extract_viewport_widthObject



35
36
37
38
39
40
41
42
43
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 35

def extract_viewport_width
   begin
     return driver.execute_script(GET_VIEWPORT_WIDTH_JAVASCRIPT_FOR_NORMAL_BROWSER)
   rescue => e 
     EyesLogger.info "getViewportSize(): Browser does not support innerWidth (#{e.message})"
   end

  driver.execute_script(GET_VIEWPORT_WIDTH_JAVASCRIPT_FOR_BAD_BROWSERS)
end

#setObject



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 70

def set
  if !dimension.respond_to?(:width) && !dimension.respond_to?(:height)
    raise ArgumentError, "expected #{dimension.inspect}:#{dimension.class}" +
                                    " to respond to #width and #height"
  end

  self.browser_size = dimension
  verify_size(:browser_size)

  cur_viewport_size = extract_viewport_from_browser
  self.browser_size = Dimension.new(
                        (2 * browser_size.width) - cur_viewport_size.width,
                        (2 * browser_size.height) - cur_viewport_size.height
                      )
  verify_size(:viewport_size)
end

#to_hashObject



106
107
108
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 106

def to_hash
  Hash[dimension.each_pair.to_a]
end

#verify_size(to_verify, sleep_time = 1, retries = 3) ⇒ Object



87
88
89
90
91
92
93
94
95
96
# File 'lib/eyes_selenium_ruby/eyes/viewport_size.rb', line 87

def verify_size(to_verify, sleep_time=1, retries=3)
  retries.times do
    sleep(sleep_time) 
    cur_size = send(to_verify)
    return if cur_size.values == dimension.values
  end

  EyesLogger.info(err_msg = "Failed setting #{to_verify} to #{required_dimensions.values}")
  raise Applitools::TestFailedError.new(err_msg)
end