Class: Applitools::Selenium::Element
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Applitools::Selenium::Element
- 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
- JS_SET_SCROLL_DATA_FORMATTED_STR =
"arguments[0].setAttribute('data-applitools-scroll', '%s')".freeze
- JS_SET_OVERFLOW_DATA_FORMATTED_STR =
"arguments[0].setAttribute('data-applitools-original-overflow', '%s')".freeze
- TRACE_PREFIX =
'EyesWebElement'.freeze
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #border_bottom_width ⇒ Object
- #border_left_width ⇒ Object
- #border_right_width ⇒ Object
- #border_top_width ⇒ Object
-
#bounds ⇒ Applitools::Base::Region
Gets the bounds of the element.
- #click ⇒ Object
- #computed_style(prop_style) ⇒ Object
- #computed_style_integer(prop_style) ⇒ Object
- #find_element(*args) ⇒ Object
- #find_elements(*args) ⇒ Object
-
#initialize(driver, element) ⇒ Element
constructor
Initialize class instance.
- #inspect ⇒ Object
- #overflow ⇒ Object
- #overflow=(overflow) ⇒ Object
- #overflow_data_attribute=(value) ⇒ Object
- #padding_bottom_width ⇒ Object
- #padding_left_width ⇒ Object
- #padding_right_width ⇒ Object
- #padding_top_width ⇒ Object
- #scroll_data_attribute=(value) ⇒ Object
- #scroll_height ⇒ Object
- #scroll_left ⇒ Object
- #scroll_to(location) ⇒ Object
- #scroll_top ⇒ Object
- #scroll_width ⇒ Object
-
#send_keys(keys) ⇒ Object
(also: #send_key)
Types content into text box.
- #to_hash ⇒ Object
Constructor Details
#initialize(driver, element) ⇒ Element
Initialize class instance.
50 51 52 53 54 |
# File 'lib/applitools/selenium/element.rb', line 50 def initialize(driver, element) super(element) @driver = driver end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
72 73 74 75 76 77 78 |
# File 'lib/applitools/selenium/element.rb', line 72 def ==(other) if other.is_a? self.class super other.web_element else super other end end |
#border_bottom_width ⇒ Object
169 170 171 |
# File 'lib/applitools/selenium/element.rb', line 169 def border_bottom_width computed_style_integer(:'border-bottom-width') end |
#border_left_width ⇒ Object
157 158 159 |
# File 'lib/applitools/selenium/element.rb', line 157 def border_left_width computed_style_integer(:'border-left-width') end |
#border_right_width ⇒ Object
165 166 167 |
# File 'lib/applitools/selenium/element.rb', line 165 def border_right_width computed_style_integer(:'border-right-width') end |
#border_top_width ⇒ Object
161 162 163 |
# File 'lib/applitools/selenium/element.rb', line 161 def border_top_width computed_style_integer(:'border-top-width') end |
#bounds ⇒ Applitools::Base::Region
Gets the bounds of the element.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/applitools/selenium/element.rb', line 96 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.})") 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 |
#click ⇒ Object
62 63 64 65 66 |
# File 'lib/applitools/selenium/element.rb', line 62 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
149 150 151 |
# File 'lib/applitools/selenium/element.rb', line 149 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
153 154 155 |
# File 'lib/applitools/selenium/element.rb', line 153 def computed_style_integer(prop_style) computed_style(prop_style).gsub(/px/, '').to_i.round end |
#find_element(*args) ⇒ Object
125 126 127 |
# File 'lib/applitools/selenium/element.rb', line 125 def find_element(*args) self.class.new driver, super end |
#find_elements(*args) ⇒ Object
129 130 131 |
# File 'lib/applitools/selenium/element.rb', line 129 def find_elements(*args) super(*args).map { |e| self.class.new driver, e } end |
#inspect ⇒ Object
68 69 70 |
# File 'lib/applitools/selenium/element.rb', line 68 def inspect TRACE_PREFIX + web_element.inspect end |
#overflow ⇒ Object
133 134 135 |
# File 'lib/applitools/selenium/element.rb', line 133 def overflow driver.execute_script(JS_GET_OVERFLOW, __getobj__).to_s end |
#overflow=(overflow) ⇒ Object
137 138 139 |
# File 'lib/applitools/selenium/element.rb', line 137 def overflow=(overflow) driver.execute_script(JS_SET_OVERFLOW_FORMATTED_STR % overflow, self) end |
#overflow_data_attribute=(value) ⇒ Object
145 146 147 |
# File 'lib/applitools/selenium/element.rb', line 145 def overflow_data_attribute=(value) driver.execute_script(JS_SET_OVERFLOW_DATA_FORMATTED_STR % value, self) end |
#padding_bottom_width ⇒ Object
185 186 187 |
# File 'lib/applitools/selenium/element.rb', line 185 def padding_bottom_width computed_style_integer(:'padding-bottom') end |
#padding_left_width ⇒ Object
173 174 175 |
# File 'lib/applitools/selenium/element.rb', line 173 def padding_left_width computed_style_integer(:'padding-left') end |
#padding_right_width ⇒ Object
177 178 179 |
# File 'lib/applitools/selenium/element.rb', line 177 def padding_right_width computed_style_integer(:'padding-right') end |
#padding_top_width ⇒ Object
181 182 183 |
# File 'lib/applitools/selenium/element.rb', line 181 def padding_top_width computed_style_integer(:'padding-top') end |
#scroll_data_attribute=(value) ⇒ Object
141 142 143 |
# File 'lib/applitools/selenium/element.rb', line 141 def scroll_data_attribute=(value) driver.execute_script(JS_SET_SCROLL_DATA_FORMATTED_STR % value, self) end |
#scroll_height ⇒ Object
201 202 203 |
# File 'lib/applitools/selenium/element.rb', line 201 def scroll_height Integer driver.execute_script(JS_GET_SCROLL_HEIGHT, self).to_s end |
#scroll_left ⇒ Object
189 190 191 |
# File 'lib/applitools/selenium/element.rb', line 189 def scroll_left Integer driver.execute_script(JS_GET_SCROLL_LEFT, self).to_s end |
#scroll_to(location) ⇒ Object
205 206 207 |
# File 'lib/applitools/selenium/element.rb', line 205 def scroll_to(location) driver.execute_script format(JS_SCROLL_TO_FORMATTED_STR, location.x, location.y), self end |
#scroll_top ⇒ Object
193 194 195 |
# File 'lib/applitools/selenium/element.rb', line 193 def scroll_top Integer driver.execute_script(JS_GET_SCROLL_TOP, self).to_s end |
#scroll_width ⇒ Object
197 198 199 |
# File 'lib/applitools/selenium/element.rb', line 197 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.
85 86 87 88 89 90 |
# File 'lib/applitools/selenium/element.rb', line 85 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_hash ⇒ Object
209 210 211 212 213 214 215 216 |
# File 'lib/applitools/selenium/element.rb', line 209 def to_hash { left: location.x.to_i, top: location.y.to_i, width: size.width.to_i, height: size.height.to_i } end |