Class: Selenium::WebDriver::Element

Inherits:
Object
  • Object
show all
Includes:
SearchContext, TakesScreenshot
Defined in:
build/rb/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 'build/rb/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 'build/rb/lib/selenium/webdriver/common/element.rb', line 43

def ==(other)
  other.is_a?(self.class) && ref == other.ref
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/



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

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

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

Get the value of a the given attribute of the element. Will return the current value, even if this has been modified after the page has been loaded. More exactly, this method will return the value of the given attribute, unless that attribute is not present, in which case the value of the property with the same name is returned. If neither value is set, nil is returned. The “style” attribute is converted as best can be to a text representation with a trailing semi-colon. 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:

class, readonly

Parameters:

  • name (String)

    attribute name

Returns:

  • (String, nil)

    attribute value



118
119
120
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 118

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.



173
174
175
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 173

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 'build/rb/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.



226
227
228
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 226

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

#displayed?Boolean

Is the element displayed?

Returns:

  • (Boolean)


203
204
205
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 203

def displayed?
  bridge.element_displayed? self
end

#enabled?Boolean

Is the element enabled?

Returns:

  • (Boolean)


183
184
185
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 183

def enabled?
  bridge.element_enabled? @id
end

#hashObject



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

def hash
  @id.hash ^ @bridge.hash
end

#inspectObject



39
40
41
# File 'build/rb/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:



237
238
239
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 237

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:



257
258
259
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 257

def location_once_scrolled_into_view
  bridge.element_location_once_scrolled_into_view @id
end

#property(name) ⇒ String?

Get the value of a the given property with the same name of the element. If the value is not set, nil is returned.

Parameters:

  • name (String)

    property name

Returns:

  • (String, nil)

    property value



130
131
132
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 130

def property(name)
  bridge.element_property self, name
end

#rectWebDriver::Rectangle

Get the dimensions and coordinates of this element.



247
248
249
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 247

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.

for SearchContext and execute_script



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

def ref
  @id
end

#selected?Boolean

Is the element selected?

Returns:

  • (Boolean)


193
194
195
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 193

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:



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

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

#sizeWebDriver::Dimension

Get the size of this element



267
268
269
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 267

def size
  bridge.element_size @id
end

#submitObject

Submit this element



211
212
213
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 211

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 'build/rb/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)


140
141
142
# File 'build/rb/lib/selenium/webdriver/common/element.rb', line 140

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.



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

def to_json(*)
  JSON.generate as_json
end