Class: Appium::Core::Element

Inherits:
Selenium::WebDriver::Element
  • Object
show all
Includes:
Base::SearchContext, Base::TakesScreenshot
Defined in:
lib/appium_lib_core/element.rb

Overview

Implement useful features for element. Patch for Selenium Webdriver.

Constant Summary

Constants included from Base::SearchContext

Base::SearchContext::FINDERS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Base::TakesScreenshot

#element_screenshot_as, #save_element_screenshot, #save_viewport_screenshot

Methods included from Base::SearchContext

#find_element, #find_elements

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ String

Returns the value of attributes like below. Read each platform to know more details.

uiautomator2: github.com/appium/appium-uiautomator2-server/blob/203cc7e57ce477f3cff5d95b135d1b3450a6033a/app/src/main/java/io/appium/uiautomator2/utils/Attribute.java#L19

checkable, checked, class, clickable, content-desc, enabled, focusable, focused
long-clickable, package, password, resource-id, scrollable, selection-start, selection-end
selected, text, bounds, index

XCUITest automation name supports below attributes.

UID, accessibilityContainer, accessible, enabled, frame,
label, name, rect, type, value, visible, wdAccessibilityContainer,
wdAccessible, wdEnabled, wdFrame, wdLabel, wdName, wdRect, wdType,
wdUID, wdValue, wdVisible

Examples:


e = @driver.find_element :accessibility_id, 'something'
e.value
e.resource_id # call 'e.attribute "resource-id"'

Returns:

  • (String)


53
54
55
56
57
58
# File 'lib/appium_lib_core/element.rb', line 53

def method_missing(method_name, *args, &block)
  ignore_list = [:to_hash]
  return if ignore_list.include? method_name

  respond_to?(method_name) ? attribute(method_name.to_s.tr('_', '-')) : super
end

Instance Attribute Details

#idString (readonly)

Retuns the element id.

Examples:

e = @driver.find_element :accessibility_id, 'something'
e.id

Returns:

  • (String)


30
31
32
# File 'lib/appium_lib_core/element.rb', line 30

def id
  @id
end

Instance Method Details

#immediate_value(*value) ⇒ Object

Set the value to element directly

Examples:


element.immediate_value 'hello'


73
74
75
# File 'lib/appium_lib_core/element.rb', line 73

def immediate_value(*value)
  @bridge.set_immediate_value @id, *value
end

#location_rel(driver) ⇒ ::Selenium::WebDriver::Point

For use with location_rel.

Examples:


e = @driver.find_element :accessibility_id, 'something'
e.location_rel @driver

Returns:

  • (::Selenium::WebDriver::Point)

    the relative x, y in a struct. ex: { x: 0.50, y: 0.20 }



96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/appium_lib_core/element.rb', line 96

def location_rel(driver)
  rect = self.rect
  location_x = rect.x.to_f
  location_y = rect.y.to_f

  size_width  = rect.width.to_f
  size_height = rect.height.to_f

  center_x = location_x + (size_width / 2.0)
  center_y = location_y + (size_height / 2.0)

  w = driver.window_size
  ::Selenium::WebDriver::Point.new "#{center_x} / #{w.width.to_f}", "#{center_y} / #{w.height.to_f}"
end

#replace_value(*value) ⇒ Object

Replace the value to element directly

Examples:


element.replace_value 'hello'


83
84
85
# File 'lib/appium_lib_core/element.rb', line 83

def replace_value(*value)
  @bridge.replace_value @id, *value
end

#respond_to_missing?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/appium_lib_core/element.rb', line 60

def respond_to_missing?(*)
  true
end

#save_screenshot(png_path) ⇒ File

Save an element screenshot to the given path

Examples:


element.save_screenshot("fine_name.png")

Parameters:

  • png_path (String)

    A path to save the screenshot

Returns:

  • (File)

    Path to the element screenshot.



152
153
154
155
156
157
158
159
# File 'lib/appium_lib_core/element.rb', line 152

def save_screenshot(png_path)
  extension = File.extname(png_path).downcase
  if extension != '.png'
    ::Appium::Logger.warn 'name used for saved screenshot does not match file type. ' \
                          'It should end with .png extension'
  end
  File.open(png_path, 'wb') { |f| f << screenshot_as(:png) }
end

#screenshotObject

Return an element screenshot as base64

Examples:


element.screenshot #=> "iVBORw0KGgoAAAANSUhEUgAABDgAAAB+CAIAAABOPDa6AAAAAX"

Returns:

  • String Base 64 encoded string



119
120
121
# File 'lib/appium_lib_core/element.rb', line 119

def screenshot
  bridge.element_screenshot @id
end

#screenshot_as(format) ⇒ Object

Return an element screenshot in the given format

Examples:


element.screenshot_as :base64 #=> "iVBORw0KGgoAAAANSUhEUgAABDgAAAB+CAIAAABOPDa6AAAAAX"

Parameters:

  • format (:base64, :png)

Returns:

  • String screenshot



132
133
134
135
136
137
138
139
140
141
# File 'lib/appium_lib_core/element.rb', line 132

def screenshot_as(format)
  case format
  when :base64
    bridge.element_screenshot @id
  when :png
    bridge.element_screenshot(@id).unpack('m')[0]
  else
    raise Core::Error::UnsupportedOperationError, "unsupported format: #{format.inspect}"
  end
end