class Selenium::WebDriver::Element

Constants

ELEMENT_KEY

Attributes

bridge[R]

Public Class Methods

new(bridge, id) click to toggle source

Creates a new Element

@api private

# File lib/selenium/webdriver/common/element.rb, line 34
def initialize(bridge, id)
  @bridge = bridge
  @id = id
end

Public Instance Methods

==(other) click to toggle source
# File lib/selenium/webdriver/common/element.rb, line 43
def ==(other)
  other.is_a?(self.class) && ref == other.ref
end
Also aliased as: eql?
[](name)

element or element #=> “someclass”

Alias for: attribute
accessible_name() click to toggle source

Gets the computed WAI-ARIA label of element.

@return [String]

# File lib/selenium/webdriver/common/element.rb, line 179
def accessible_name
  bridge.element_aria_label @id
end
aria_role() click to toggle source

Gets the computed WAI-ARIA role of element

@return [String]

# File lib/selenium/webdriver/common/element.rb, line 169
def aria_role
  bridge.element_aria_role @id
end
as_json(*) click to toggle source

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

@api private

# File lib/selenium/webdriver/common/element.rb, line 375
def as_json(*)
  @id.is_a?(Hash) ? @id : {ELEMENT_KEY => @id}
end
attribute(name) click to toggle source

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.

@param [String] name attribute name @return [String, nil] attribute value

@see dom_attribute @see property

# File lib/selenium/webdriver/common/element.rb, line 126
def attribute(name)
  bridge.element_attribute self, name
end
Also aliased as: []
clear() click to toggle source

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.

# File lib/selenium/webdriver/common/element.rb, line 222
def clear
  bridge.clear_element @id
end
click() click to toggle source

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)

@example Click on a button

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

@raise [StaleElementReferenceError] if the element no longer exists as

defined
# File lib/selenium/webdriver/common/element.rb, line 76
def click
  bridge.click_element @id
end
css_value(prop) click to toggle source

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.

@see www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration

# File lib/selenium/webdriver/common/element.rb, line 275
def css_value(prop)
  bridge.element_value_of_css_property @id, prop
end
Also aliased as: style
displayed?() click to toggle source

Is the element displayed?

@return [Boolean]

# File lib/selenium/webdriver/common/element.rb, line 252
def displayed?
  bridge.element_displayed? self
end
dom_attribute(name) click to toggle source

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.

@param [String] name attribute name @return [String, nil] attribute value

@see attribute @see property

# File lib/selenium/webdriver/common/element.rb, line 145
def dom_attribute(name)
  bridge.element_dom_attribute @id, name
end
enabled?() click to toggle source

Is the element enabled?

@return [Boolean]

# File lib/selenium/webdriver/common/element.rb, line 232
def enabled?
  bridge.element_enabled? @id
end
eql?(other)
Alias for: ==
hash() click to toggle source
# File lib/selenium/webdriver/common/element.rb, line 48
def hash
  [@id, @bridge].hash
end
inspect() click to toggle source
# 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
location() click to toggle source

Get the location of this element.

@return [WebDriver::Point]

# File lib/selenium/webdriver/common/element.rb, line 286
def location
  bridge.element_location @id
end
location_once_scrolled_into_view() click to toggle source

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

@return [WebDriver::Point]

# 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) click to toggle source

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.

@param [String] name property name @return [String, nil] property value

# File lib/selenium/webdriver/common/element.rb, line 159
def property(name)
  bridge.element_property @id, name
end
rect() click to toggle source

Get the dimensions and coordinates of this element.

@return [WebDriver::Rectangle]

# File lib/selenium/webdriver/common/element.rb, line 296
def rect
  bridge.element_rect @id
end
ref() click to toggle source

@api private @see SearchContext

# File lib/selenium/webdriver/common/element.rb, line 354
def ref
  [:element, @id]
end
selected?() click to toggle source

Is the element selected?

@return [Boolean]

# File lib/selenium/webdriver/common/element.rb, line 242
def selected?
  bridge.element_selected? @id
end
send_key(*args)
Alias for: send_keys
send_keys(*args) click to toggle source

Send keystrokes to this element

@param [String, Symbol, Array] args keystrokes to send

Examples:

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

@see Keys::KEYS

# File lib/selenium/webdriver/common/element.rb, line 207
def send_keys(*args)
  bridge.send_keys_to_element @id, Keys.encode(args)
end
Also aliased as: send_key
shadow_root() click to toggle source

Returns the shadow root of an element.

@return [WebDriver::ShadowRoot]

# File lib/selenium/webdriver/common/element.rb, line 326
def shadow_root
  bridge.shadow_root @id
end
size() click to toggle source

Get the size of this element

@return [WebDriver::Dimension]

# File lib/selenium/webdriver/common/element.rb, line 316
def size
  bridge.element_size @id
end
style(prop)
Alias for: css_value
submit() click to toggle source

Submit this element

# File lib/selenium/webdriver/common/element.rb, line 260
def submit
  bridge.submit_element @id
end
tag_name() click to toggle source

Get the tag name of the element.

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

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

@return [String] The tag name of this element.

# File lib/selenium/webdriver/common/element.rb, line 90
def tag_name
  bridge.element_tag_name @id
end
text() click to toggle source

Get the text content of this element

@return [String]

# File lib/selenium/webdriver/common/element.rb, line 189
def text
  bridge.element_text @id
end
to_json(*) click to toggle source

Convert to a WebElement JSON Object for transmission over the wire. @see github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#basic-terms-and-concepts

@api private

# File lib/selenium/webdriver/common/element.rb, line 365
def to_json(*)
  JSON.generate as_json
end

Private Instance Methods

screenshot() click to toggle source
# File lib/selenium/webdriver/common/element.rb, line 390
def screenshot
  bridge.element_screenshot(@id)
end
selectable?() click to toggle source
# File lib/selenium/webdriver/common/element.rb, line 383
def selectable?
  tn = tag_name.downcase
  type = attribute(:type).to_s.downcase

  tn == 'option' || (tn == 'input' && %w[radio checkbox].include?(type))
end