Class: Maze::Driver::Appium
- Inherits:
-
Appium::Driver
- Object
- Appium::Driver
- Maze::Driver::Appium
- Defined in:
- lib/maze/driver/appium.rb
Overview
Provide a thin layer of abstraction above @see Appium::Driver
Instance Attribute Summary collapse
-
#app_id ⇒ String
The app_id derived from session_capabilities (appPackage on Android, bundleID on iOS).
-
#capabilities ⇒ Object
readonly
Returns the value of attribute capabilities.
-
#device_type ⇒ Object
readonly
Returns the value of attribute device_type.
Instance Method Summary collapse
-
#clear_and_send_keys_to_element(element_id, text) ⇒ Object
Sends keys to a given element, clearing it first.
-
#clear_element(element_id) ⇒ Object
Clears a given element.
-
#click_element(element_id) ⇒ Object
Clicks a given element.
-
#click_element_if_present(element_id) ⇒ Boolean
Clicks a given element, ignoring any NoSuchElementError.
- #device_info ⇒ Object
-
#find_element_timed(element_id) ⇒ Object
A wrapper around find_element adding timer functionality.
-
#initialize(server_url, capabilities, locator = :id) ⇒ Appium
constructor
Creates the Appium driver.
-
#page_source ⇒ Object
Gets the application hierarchy XML.
-
#reset_with_timeout(timeout = 0.1) ⇒ Object
Reset the currently running application after a given timeout.
-
#send_keys(text) ⇒ Object
Send keys to the device without a specific element.
-
#send_keys_to_element(element_id, text) ⇒ Object
Sends keys to a given element.
- #session_capabilities ⇒ Object
-
#set_rotation(orientation) ⇒ Object
Sets the rotation of the device.
-
#start_driver ⇒ Object
Starts the Appium driver.
-
#unlock ⇒ Object
Unlocks the device.
-
#wait_for_element(element_id, timeout = 15, retry_if_stale = true) ⇒ Object
Checks for an element, waiting until it is present or the method times out.
- #window_size ⇒ Object
Constructor Details
#initialize(server_url, capabilities, locator = :id) ⇒ Appium
Creates the Appium driver
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/maze/driver/appium.rb', line 31 def initialize(server_url, capabilities, locator = :id) # Sets up identifiers for ease of connecting jobs capabilities ||= {} @element_locator = locator @capabilities = capabilities # Timers @find_element_timer = Maze.timers.add 'Appium - find element' @click_element_timer = Maze.timers.add 'Appium - click element' @clear_element_timer = Maze.timers.add 'Appium - clear element' @send_keys_timer = Maze.timers.add 'Appium - send keys to element' super({ 'caps' => @capabilities, 'appium_lib' => { server_url: server_url } }, true) end |
Instance Attribute Details
#app_id ⇒ String
Returns The app_id derived from session_capabilities (appPackage on Android, bundleID on iOS).
16 17 18 |
# File 'lib/maze/driver/appium.rb', line 16 def app_id @app_id end |
#capabilities ⇒ Object (readonly)
Returns the value of attribute capabilities.
24 25 26 |
# File 'lib/maze/driver/appium.rb', line 24 def capabilities @capabilities end |
#device_type ⇒ Object (readonly)
Returns the value of attribute device_type.
20 21 22 |
# File 'lib/maze/driver/appium.rb', line 20 def device_type @device_type end |
Instance Method Details
#clear_and_send_keys_to_element(element_id, text) ⇒ Object
Sends keys to a given element, clearing it first
172 173 174 175 176 177 178 179 180 181 |
# File 'lib/maze/driver/appium.rb', line 172 def clear_and_send_keys_to_element(element_id, text) element = find_element_timed(element_id) @clear_element_timer.time do element.clear end @send_keys_timer.time do element.send_keys(text) end end |
#clear_element(element_id) ⇒ Object
Clears a given element
122 123 124 125 126 127 |
# File 'lib/maze/driver/appium.rb', line 122 def clear_element(element_id) element = find_element_timed(element_id) @clear_element_timer.time do element.clear end end |
#click_element(element_id) ⇒ Object
Clicks a given element
98 99 100 101 102 103 |
# File 'lib/maze/driver/appium.rb', line 98 def click_element(element_id) element = find_element_timed(element_id) @click_element_timer.time do element.click end end |
#click_element_if_present(element_id) ⇒ Boolean
Clicks a given element, ignoring any NoSuchElementError
109 110 111 112 113 114 115 116 117 |
# File 'lib/maze/driver/appium.rb', line 109 def click_element_if_present(element_id) element = find_element_timed(element_id) @click_element_timer.time do element.click end true rescue Selenium::WebDriver::Error::NoSuchElementError false end |
#device_info ⇒ Object
191 192 193 |
# File 'lib/maze/driver/appium.rb', line 191 def device_info driver.execute_script('mobile:deviceInfo') end |
#find_element_timed(element_id) ⇒ Object
A wrapper around find_element adding timer functionality
89 90 91 92 93 |
# File 'lib/maze/driver/appium.rb', line 89 def find_element_timed(element_id) @find_element_timer.time do find_element(@element_locator, element_id) end end |
#page_source ⇒ Object
Gets the application hierarchy XML
130 131 132 |
# File 'lib/maze/driver/appium.rb', line 130 def page_source @driver.page_source end |
#reset_with_timeout(timeout = 0.1) ⇒ Object
Reset the currently running application after a given timeout
186 187 188 189 |
# File 'lib/maze/driver/appium.rb', line 186 def reset_with_timeout(timeout = 0.1) sleep(timeout) reset end |
#send_keys(text) ⇒ Object
Send keys to the device without a specific element
164 165 166 |
# File 'lib/maze/driver/appium.rb', line 164 def send_keys(text) @driver.send_keys(text) end |
#send_keys_to_element(element_id, text) ⇒ Object
Sends keys to a given element
143 144 145 146 147 148 |
# File 'lib/maze/driver/appium.rb', line 143 def send_keys_to_element(element_id, text) element = find_element_timed(element_id) @send_keys_timer.time do element.send_keys(text) end end |
#session_capabilities ⇒ Object
195 196 197 |
# File 'lib/maze/driver/appium.rb', line 195 def session_capabilities driver.session_capabilities end |
#set_rotation(orientation) ⇒ Object
Sets the rotation of the device
153 154 155 |
# File 'lib/maze/driver/appium.rb', line 153 def set_rotation(orientation) @driver.rotation = orientation end |
#start_driver ⇒ Object
Starts the Appium driver
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/maze/driver/appium.rb', line 53 def start_driver begin $logger.info 'Starting Appium driver...' time = Time.now super $logger.info "Appium driver started in #{(Time.now - time).to_i}s" rescue => error $logger.warn "Appium driver failed to start in #{(Time.now - time).to_i}s" $logger.warn "#{error.class} occurred with message: #{error.}" # Do not Bugsnag.notify here as we re-raise the error raise error end end |
#unlock ⇒ Object
Unlocks the device
135 136 137 |
# File 'lib/maze/driver/appium.rb', line 135 def unlock @driver.unlock end |
#wait_for_element(element_id, timeout = 15, retry_if_stale = true) ⇒ Object
Checks for an element, waiting until it is present or the method times out
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/maze/driver/appium.rb', line 72 def wait_for_element(element_id, timeout = 15, retry_if_stale = true) wait = Selenium::WebDriver::Wait.new(timeout: timeout) wait.until { find_element(@element_locator, element_id).displayed? } rescue Selenium::WebDriver::Error::TimeoutError false rescue Selenium::WebDriver::Error::StaleElementReferenceError => e if retry_if_stale wait_for_element(element_id, timeout, false) else $logger.warn "StaleElementReferenceError occurred: #{e}" false end else true end |
#window_size ⇒ Object
157 158 159 |
# File 'lib/maze/driver/appium.rb', line 157 def window_size @driver.window_size end |