Class: Applitools::Selenium::Element

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/applitools/selenium/element.rb

Constant Summary collapse

JS_GET_COMPUTED_STYLE_FORMATTED_STR =
<<-JS.freeze
   var elem = arguments[0];
   var styleProp = '%s';
   if (window.getComputedStyle) {
   return window.getComputedStyle(elem, null)
   .getPropertyValue(styleProp);
   } else if (elem.currentStyle) {
   return elem.currentStyle[styleProp];
   } else {
   return null;
   };
JS
JS_GET_SCROLL_LEFT =
'return arguments[0].scrollLeft;'.freeze
JS_GET_SCROLL_TOP =
'return arguments[0].scrollTop;'.freeze
JS_GET_SCROLL_WIDTH =
'return arguments[0].scrollWidth;'.freeze
JS_GET_SCROLL_HEIGHT =
'return arguments[0].scrollHeight;'.freeze
JS_SCROLL_TO_FORMATTED_STR =
<<-JS.freeze
  arguments[0].scrollLeft = %d;
  arguments[0].scrollTop = %d;
JS
JS_GET_OVERFLOW =
'return arguments[0].style.overflow;'.freeze
JS_SET_OVERFLOW_FORMATTED_STR =
"arguments[0].style.overflow = '%s'".freeze
TRACE_PREFIX =
'EyesWebElement'.freeze

Instance Method Summary collapse

Constructor Details

#initialize(driver, element) ⇒ Element

Initialize class instance.

Parameters:



37
38
39
40
41
# File 'lib/applitools/selenium/element.rb', line 37

def initialize(driver, element)
  super(element)

  @driver = driver
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



59
60
61
62
63
64
65
# File 'lib/applitools/selenium/element.rb', line 59

def ==(other)
  if other.is_a? self.class
    super other.web_element
  else
    super other
  end
end

#border_bottom_widthObject



148
149
150
# File 'lib/applitools/selenium/element.rb', line 148

def border_bottom_width
  computed_style_integer(:'border-bottom-width')
end

#border_left_widthObject



136
137
138
# File 'lib/applitools/selenium/element.rb', line 136

def border_left_width
  computed_style_integer(:'border-left-width')
end

#border_right_widthObject



144
145
146
# File 'lib/applitools/selenium/element.rb', line 144

def border_right_width
  computed_style_integer(:'border-right-width')
end

#border_top_widthObject



140
141
142
# File 'lib/applitools/selenium/element.rb', line 140

def border_top_width
  computed_style_integer(:'border-top-width')
end

#boundsApplitools::Base::Region

Gets the bounds of the element.

Returns:

  • (Applitools::Base::Region)

    An instance of the region.



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/applitools/selenium/element.rb', line 83

def bounds
  point = location
  left = point.x
  top = point.y
  width = 0
  height = 0

  begin
    dimension = size
    width = dimension.width
    height = dimension.height
  rescue => e
    # Not supported on all platforms.
    Applitools::EyesLogger.error("Failed extracting size using JavaScript: (#{e.message})")
  end

  if left < 0
    width = [0, width + left].max
    left = 0
  end

  if top < 0
    height = [0, height + top].max
    top = 0
  end

  Applitools::Region.new(left, top, width, height)
end

#clickObject



49
50
51
52
53
# File 'lib/applitools/selenium/element.rb', line 49

def click
  @driver.add_mouse_trigger(Applitools::MouseTrigger::MOUSE_ACTION[:click], self)
  # logger.info "click(#{bounds})";
  web_element.click
end

#computed_style(prop_style) ⇒ Object



128
129
130
# File 'lib/applitools/selenium/element.rb', line 128

def computed_style(prop_style)
  driver.execute_script(JS_GET_COMPUTED_STYLE_FORMATTED_STR % prop_style, self).to_s
end

#computed_style_integer(prop_style) ⇒ Object



132
133
134
# File 'lib/applitools/selenium/element.rb', line 132

def computed_style_integer(prop_style)
  computed_style(prop_style).gsub(/px/, '').to_i.round
end

#find_element(*args) ⇒ Object



112
113
114
# File 'lib/applitools/selenium/element.rb', line 112

def find_element(*args)
  self.class.new driver, super
end

#find_elements(*args) ⇒ Object



116
117
118
# File 'lib/applitools/selenium/element.rb', line 116

def find_elements(*args)
  super(*args).map { |e| self.class.new driver, e }
end

#inspectObject



55
56
57
# File 'lib/applitools/selenium/element.rb', line 55

def inspect
  TRACE_PREFIX + web_element.inspect
end

#overflowObject



120
121
122
# File 'lib/applitools/selenium/element.rb', line 120

def overflow
  driver.execute_script(JS_GET_OVERFLOW, __getobj__).to_s
end

#overflow=(overflow) ⇒ Object



124
125
126
# File 'lib/applitools/selenium/element.rb', line 124

def overflow=(overflow)
  driver.execute_script(JS_SET_OVERFLOW_FORMATTED_STR % overflow, self)
end

#padding_bottom_widthObject



164
165
166
# File 'lib/applitools/selenium/element.rb', line 164

def padding_bottom_width
  computed_style_integer(:'padding-bottom')
end

#padding_left_widthObject



152
153
154
# File 'lib/applitools/selenium/element.rb', line 152

def padding_left_width
  computed_style_integer(:'padding-left')
end

#padding_right_widthObject



156
157
158
# File 'lib/applitools/selenium/element.rb', line 156

def padding_right_width
  computed_style_integer(:'padding-right')
end

#padding_top_widthObject



160
161
162
# File 'lib/applitools/selenium/element.rb', line 160

def padding_top_width
  computed_style_integer(:'padding-top')
end

#scroll_heightObject



180
181
182
# File 'lib/applitools/selenium/element.rb', line 180

def scroll_height
  Integer driver.execute_script(JS_GET_SCROLL_HEIGHT, self).to_s
end

#scroll_leftObject



168
169
170
# File 'lib/applitools/selenium/element.rb', line 168

def scroll_left
  Integer driver.execute_script(JS_GET_SCROLL_LEFT, self).to_s
end

#scroll_to(location) ⇒ Object



184
185
186
# File 'lib/applitools/selenium/element.rb', line 184

def scroll_to(location)
  driver.execute_script format(JS_SCROLL_TO_FORMATTED_STR, location.x, location.y), self
end

#scroll_topObject



172
173
174
# File 'lib/applitools/selenium/element.rb', line 172

def scroll_top
  Integer driver.execute_script(JS_GET_SCROLL_TOP, self).to_s
end

#scroll_widthObject



176
177
178
# File 'lib/applitools/selenium/element.rb', line 176

def scroll_width
  Integer driver.execute_script(JS_GET_SCROLL_WIDTH, self).to_s
end

#send_keys(keys) ⇒ Object Also known as: send_key

Types content into text box.

Parameters:

  • keys (Array, String)

    The content to type.



72
73
74
75
76
77
# File 'lib/applitools/selenium/element.rb', line 72

def send_keys(*args)
  Selenium::WebDriver::Keys.encode(args).each do |key|
    @driver.add_text_trigger(self, key.to_s)
  end
  web_element.send_keys(*args)
end

#to_hashObject



188
189
190
191
192
193
194
195
# File 'lib/applitools/selenium/element.rb', line 188

def to_hash
  {
    left: location.x.to_i,
    top: location.y.to_i,
    width: size.width.to_i,
    height: size.height.to_i
  }
end