Class: Selenium::WebDriver::Element

Inherits:
Object
  • Object
show all
Includes:
SearchContext, TakesScreenshot
Defined in:
lib/selenium/webdriver/common/element.rb

Constant Summary collapse

ELEMENT_KEY =
'element-6066-11e4-a52e-4f735466cecf'

Constants included from SearchContext

SearchContext::FINDERS

Instance Method Summary collapse

Methods included from TakesScreenshot

#save_screenshot, #screenshot_as

Methods included from SearchContext

#find_element, #find_elements

Constructor Details

#initialize(bridge, id) ⇒ Element

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Creates a new Element



34
35
36
37
# File 'lib/selenium/webdriver/common/element.rb', line 34

def initialize(bridge, id)
  @bridge = bridge
  @id = id
end

Instance Method Details

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



43
44
45
# File 'lib/selenium/webdriver/common/element.rb', line 43

def ==(other)
  other.is_a?(self.class) && ref == other.ref
end

#accessible_nameString

Gets the computed WAI-ARIA label of element.

Returns:

  • (String)


179
180
181
# File 'lib/selenium/webdriver/common/element.rb', line 179

def accessible_name
  bridge.element_aria_label @id
end

#aria_roleString

Gets the computed WAI-ARIA role of element

Returns:

  • (String)


169
170
171
# File 'lib/selenium/webdriver/common/element.rb', line 169

def aria_role
  bridge.element_aria_role @id
end

#as_jsonObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

For Rails 3 - jonathanjulian.com/2010/04/rails-to_json-or-as_json/



375
376
377
# File 'lib/selenium/webdriver/common/element.rb', line 375

def as_json(*)
  @id.is_a?(Hash) ? @id : {ELEMENT_KEY => @id}
end

#attribute(name) ⇒ String? Also known as: []

This method attempts to provide the most likely desired current value for the attribute of the element, even when that desired value is actually a JavaScript property. It is implemented with a custom JavaScript atom. To obtain the exact value of the attribute or property, use #dom_attribute or #property methods respectively.

More exactly, this method will return the value of the property with the given name, if it exists. If it does not, then the value of the attribute with the given name is returned. If neither exists, null is returned.

The “style” attribute is converted as best can be to a text representation with a trailing semicolon.

The following are deemed to be “boolean” attributes, and will return either “true” or “false”:

async, autofocus, autoplay, checked, compact, complete, controls, declare, defaultchecked, defaultselected, defer, disabled, draggable, ended, formnovalidate, hidden, indeterminate, iscontenteditable, ismap, itemscope, loop, multiple, muted, nohref, noresize, noshade, novalidate, nowrap, open, paused, pubdate, readonly, required, reversed, scoped, seamless, seeking, selected, spellcheck, truespeed, willvalidate

Finally, the following commonly mis-capitalized attribute/property names are evaluated as expected:

When the value of “class” is requested, the “className” property is returned. When the value of “readonly” is requested, the “readOnly” property is returned.

Parameters:

  • name (String)

    attribute name

Returns:

  • (String, nil)

    attribute value

See Also:



126
127
128
# File 'lib/selenium/webdriver/common/element.rb', line 126

def attribute(name)
  bridge.element_attribute self, name
end

#clearObject

If this element is a text entry element, this will clear the value. Has no effect on other elements. Text entry elements are INPUT and TEXTAREA elements.

Note that the events fired by this event may not be as you’d expect. In particular, we don’t fire any keyboard or mouse events. If you want to ensure keyboard events are fired, consider using #send_keys with the backspace key. To ensure you get a change event, consider following with a call to #send_keys with the tab key.



222
223
224
# File 'lib/selenium/webdriver/common/element.rb', line 222

def clear
  bridge.clear_element @id
end

#clickObject

Click this element. If this causes a new page to load, this method will attempt to block until the page has loaded. At this point, you should discard all references to this element and any further operations performed on this element will raise a StaleElementReferenceError unless you know that the element and the page will still be present. If click() causes a new page to be loaded via an event or is done by sending a native event then the method will not wait for it to be loaded and the caller should verify that a new page has been loaded.

There are some preconditions for an element to be clicked. The element must be visible and it must have a height and width greater then 0.

Equivalent to:

driver.action.click(element)

Examples:

Click on a button


driver.find_element(tag_name: "button").click

Raises:

  • (StaleElementReferenceError)

    if the element no longer exists as defined



76
77
78
# File 'lib/selenium/webdriver/common/element.rb', line 76

def click
  bridge.click_element @id
end

#css_value(prop) ⇒ Object Also known as: style

Get the value of the given CSS property

Note that shorthand CSS properties (e.g. background, font, border, border-top, margin, margin-top, padding, padding-top, list-style, outline, pause, cue) are not returned, in accordance with the DOM CSS2 specification - you should directly access the longhand properties (e.g. background-color) to access the desired values.



275
276
277
# File 'lib/selenium/webdriver/common/element.rb', line 275

def css_value(prop)
  bridge.element_value_of_css_property @id, prop
end

#displayed?Boolean

Is the element displayed?

Returns:

  • (Boolean)


252
253
254
# File 'lib/selenium/webdriver/common/element.rb', line 252

def displayed?
  bridge.element_displayed? self
end

#dom_attribute(name) ⇒ String?

Gets the value of a declared HTML attribute of this element.

As opposed to the #attribute method, this method only returns attributes declared in the element’s HTML markup.

If the attribute is not set, nil is returned.

Parameters:

  • name (String)

    attribute name

Returns:

  • (String, nil)

    attribute value

See Also:



145
146
147
# File 'lib/selenium/webdriver/common/element.rb', line 145

def dom_attribute(name)
  bridge.element_dom_attribute @id, name
end

#enabled?Boolean

Is the element enabled?

Returns:

  • (Boolean)


232
233
234
# File 'lib/selenium/webdriver/common/element.rb', line 232

def enabled?
  bridge.element_enabled? @id
end

#hashObject



48
49
50
# File 'lib/selenium/webdriver/common/element.rb', line 48

def hash
  [@id, @bridge].hash
end

#inspectObject



39
40
41
# File 'lib/selenium/webdriver/common/element.rb', line 39

def inspect
  format '#<%<class>s:0x%<hash>x id=%<id>s>', class: self.class, hash: hash * 2, id: @id.inspect
end

#locationWebDriver::Point

Get the location of this element.

Returns:



286
287
288
# File 'lib/selenium/webdriver/common/element.rb', line 286

def location
  bridge.element_location @id
end

#location_once_scrolled_into_viewWebDriver::Point

Determine an element’s location on the screen once it has been scrolled into view.

Returns:



306
307
308
# File 'lib/selenium/webdriver/common/element.rb', line 306

def location_once_scrolled_into_view
  bridge.element_location_once_scrolled_into_view @id
end

#property(name) ⇒ String?

Gets the value of a JavaScript property of this element This will return the current value, even if this has been modified after the page has been loaded. If the value is not set, nil is returned.

Parameters:

  • name (String)

    property name

Returns:

  • (String, nil)

    property value



159
160
161
# File 'lib/selenium/webdriver/common/element.rb', line 159

def property(name)
  bridge.element_property @id, name
end

#rectWebDriver::Rectangle

Get the dimensions and coordinates of this element.



296
297
298
# File 'lib/selenium/webdriver/common/element.rb', line 296

def rect
  bridge.element_rect @id
end

#refObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

See Also:



354
355
356
# File 'lib/selenium/webdriver/common/element.rb', line 354

def ref
  [:element, @id]
end

#selected?Boolean

Is the element selected?

Returns:

  • (Boolean)


242
243
244
# File 'lib/selenium/webdriver/common/element.rb', line 242

def selected?
  bridge.element_selected? @id
end

#send_keys(*args) ⇒ Object Also known as: send_key

Send keystrokes to this element

Examples:

element.send_keys "foo"                     #=> value: 'foo'
element.send_keys "tet", :arrow_left, "s"   #=> value: 'test'
element.send_keys [:control, 'a'], :space   #=> value: ' '

Parameters:

  • args (String, Symbol, Array)

    keystrokes to send

See Also:



207
208
209
# File 'lib/selenium/webdriver/common/element.rb', line 207

def send_keys(*args)
  bridge.send_keys_to_element @id, Keys.encode(args)
end

#shadow_rootWebDriver::ShadowRoot

Returns the shadow root of an element.



326
327
328
# File 'lib/selenium/webdriver/common/element.rb', line 326

def shadow_root
  bridge.shadow_root @id
end

#sizeWebDriver::Dimension

Get the size of this element



316
317
318
# File 'lib/selenium/webdriver/common/element.rb', line 316

def size
  bridge.element_size @id
end

#submitObject

Submit this element



260
261
262
# File 'lib/selenium/webdriver/common/element.rb', line 260

def submit
  bridge.submit_element @id
end

#tag_nameString

Get the tag name of the element.

Examples:

Get the tagname of an INPUT element(returns “input”)


driver.find_element(xpath: "//input").tag_name

Returns:

  • (String)

    The tag name of this element.



90
91
92
# File 'lib/selenium/webdriver/common/element.rb', line 90

def tag_name
  bridge.element_tag_name @id
end

#textString

Get the text content of this element

Returns:

  • (String)


189
190
191
# File 'lib/selenium/webdriver/common/element.rb', line 189

def text
  bridge.element_text @id
end

#to_jsonObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Convert to a WebElement JSON Object for transmission over the wire.



365
366
367
# File 'lib/selenium/webdriver/common/element.rb', line 365

def to_json(*)
  JSON.generate as_json
end