Class: Appium::Core::Base::Bridge
- Inherits:
-
Selenium::WebDriver::Remote::Bridge
- Object
- Selenium::WebDriver::Remote::Bridge
- Appium::Core::Base::Bridge
- Includes:
- Device::AppManagement, Device::AppState, Device::Context, Device::Device, Device::DeviceLock, Device::ExecuteDriver, Device::FileManagement, Device::ImageComparison, Device::ImeActions, Device::KeyEvent, Device::Keyboard, Device::Orientation, Device::ScreenRecord::Command, Device::Setting, Device::TouchActions, Device::Value
- Defined in:
- lib/appium_lib_core/common/base/bridge.rb
Constant Summary collapse
- APPIUM_PREFIX =
Prefix for extra capability defined by W3C
'appium:'
- APPIUM_NATIVE_BROWSER_NAME =
No ‘browserName’ means the session is native appium connection
'appium'
Instance Attribute Summary collapse
-
#available_commands ⇒ Object
readonly
Returns the value of attribute available_commands.
Instance Method Summary collapse
-
#action(_deprecated_async = nil, async: false, devices: nil) ⇒ Object
Perform ‘touch’ actions for W3C module.
-
#active_element ⇒ Object
(also: #switch_to_active_element)
For Appium override.
-
#add_appium_prefix(capabilities) ⇒ ::Appium::Core::Base::Capabilities
Append
appium:
prefix for Appium following W3C spec www.w3.org/TR/webdriver/#dfn-validate-capabilities. -
#add_command(method:, url:, name:, &block) ⇒ Object
command for Appium 2.0.
-
#attach_to(session_id, platform_name, automation_name) ⇒ ::Appium::Core::Base::Capabilities
Appium only.
-
#available_log_types ⇒ Object
logs.
- #browser ⇒ Object
- #commands(command) ⇒ Object
-
#convert_to_element(id) ⇒ ::Appium::Core::Element
For Appium.
-
#create_session(capabilities) ⇒ ::Appium::Core::Base::Capabilities
Override Creates session handling.
-
#element_attribute(element, name) ⇒ Object
For Appium override.
-
#element_displayed?(element) ⇒ Boolean
For Appium override.
- #element_screenshot(element_id) ⇒ Object
-
#find_element_by(how, what, parent_ref = []) ⇒ Object
For Appium override.
-
#find_elements_by(how, what, parent_ref = []) ⇒ Object
For Appium override.
-
#get_timeouts ⇒ Object
Port from MJSONWP.
-
#location ⇒ Object
For Appium No implementation for W3C webdriver module called in ‘extend DriverExtensions::HasLocation’.
-
#log(type) ⇒ Object
For Appium No implementation for W3C webdriver module.
-
#log_event(vendor, event) ⇒ Object
For Appium.
-
#log_events(type = nil) ⇒ Object
For Appium.
-
#network_connection ⇒ Object
For Appium override called in ‘extend DriverExtensions::HasNetworkConnection’.
-
#network_connection=(type) ⇒ Object
For Appium override called in ‘extend DriverExtensions::HasNetworkConnection’.
-
#send_command(command_params) ⇒ Object
for selenium-webdriver compatibility in chrome browser session.
-
#session_capabilities ⇒ Object
Port from MJSONWP.
-
#sessions ⇒ Object
Returns all available sessions on the Appium server instance.
-
#set_location(lat, lon, alt = 0.0, speed: nil, satellites: nil) ⇒ Object
For Appium No implementation for W3C webdriver module.
- #status ⇒ Object
- #viewport_screenshot ⇒ Object
Instance Attribute Details
#available_commands ⇒ Object (readonly)
Returns the value of attribute available_commands.
42 43 44 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 42 def available_commands @available_commands end |
Instance Method Details
#action(_deprecated_async = nil, async: false, devices: nil) ⇒ Object
Perform ‘touch’ actions for W3C module. Generate touch
pointer action here and users can use this via driver.action
-
seleniumhq.github.io/selenium/docs/api/rb/Selenium/WebDriver/W3CActionBuilder.html
-
seleniumhq.github.io/selenium/docs/api/rb/Selenium/WebDriver/PointerActions.html
-
seleniumhq.github.io/selenium/docs/api/rb/Selenium/WebDriver/KeyActions.html
The pointer type is ‘touch’ by default in the Appium Ruby client.
195 196 197 198 199 200 201 202 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 195 def action(_deprecated_async = nil, async: false, devices: nil) ::Selenium::WebDriver::ActionBuilder.new( self, devices: devices || [::Selenium::WebDriver::Interactions.pointer(:touch, name: 'touch')], async: async, duration: 50 # milliseconds ) end |
#active_element ⇒ Object Also known as: switch_to_active_element
For Appium override
234 235 236 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 234 def active_element ::Appium::Core::Element.new self, element_id_from(execute(:get_active_element)) end |
#add_appium_prefix(capabilities) ⇒ ::Appium::Core::Base::Capabilities
Append appium:
prefix for Appium following W3C spec www.w3.org/TR/webdriver/#dfn-validate-capabilities
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 120 def add_appium_prefix(capabilities) w3c_capabilities = ::Appium::Core::Base::Capabilities.new capabilities = capabilities.send(:capabilities) unless capabilities.is_a?(Hash) capabilities.each do |name, value| next if value.nil? next if value.is_a?(String) && value.empty? capability_name = name.to_s w3c_name = extension_prefix?(capability_name) ? name : "#{APPIUM_PREFIX}#{capability_name}" w3c_capabilities[w3c_name] = value end w3c_capabilities end |
#add_command(method:, url:, name:, &block) ⇒ Object
command for Appium 2.0.
161 162 163 164 165 166 167 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 161 def add_command(method:, url:, name:, &block) ::Appium::Logger.info "Overriding the method '#{name}' for '#{url}'" if @available_commands.key? name @available_commands[name] = [method, url] ::Appium::Core::Device.add_endpoint_method name, &block end |
#attach_to(session_id, platform_name, automation_name) ⇒ ::Appium::Core::Base::Capabilities
Appium only. Attach to an existing session.
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 68 def attach_to(session_id, platform_name, automation_name) @available_commands = ::Appium::Core::Commands::COMMANDS.dup @session_id = session_id # generate a dummy capabilities instance which only has the given platformName and automationName @capabilities = ::Appium::Core::Base::Capabilities.new( 'platformName' => platform_name, 'automationName' => automation_name ) end |
#available_log_types ⇒ Object
logs
For Appium No implementation for W3C webdriver module
322 323 324 325 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 322 def available_log_types types = execute :get_available_log_types Array(types).map(&:to_sym) end |
#browser ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 44 def browser @browser ||= begin name = @capabilities&.browser_name name ? name.tr(' ', '_').downcase.to_sym : 'unknown' rescue KeyError APPIUM_NATIVE_BROWSER_NAME end end |
#commands(command) ⇒ Object
169 170 171 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 169 def commands(command) @available_commands[command] end |
#convert_to_element(id) ⇒ ::Appium::Core::Element
For Appium
282 283 284 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 282 def convert_to_element(id) ::Appium::Core::Element.new self, element_id_from(id) end |
#create_session(capabilities) ⇒ ::Appium::Core::Base::Capabilities
Override Creates session handling.
103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 103 def create_session(capabilities) @available_commands = ::Appium::Core::Commands::COMMANDS.dup always_match = add_appium_prefix(capabilities) response = execute(:new_session, {}, { capabilities: { alwaysMatch: always_match, firstMatch: [{}] } }) @session_id = response['sessionId'] raise ::Selenium::WebDriver::Error::WebDriverError, 'no sessionId in returned payload' unless @session_id @capabilities = json_create(response['capabilities']) end |
#element_attribute(element, name) ⇒ Object
For Appium override
225 226 227 228 229 230 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 225 def element_attribute(element, name) # For W3C in Selenium Client # execute_atom :getAttribute, element, name. # 'dom_attribute' in the WebDriver Selenium. execute :get_element_attribute, id: element.id, name: name end |
#element_displayed?(element) ⇒ Boolean
For Appium override
216 217 218 219 220 221 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 216 def element_displayed?(element) # For W3C # https://github.com/SeleniumHQ/selenium/commit/b618499adcc3a9f667590652c5757c0caa703289 # execute_atom :isDisplayed, element execute :is_element_displayed, id: element.id end |
#element_screenshot(element_id) ⇒ Object
356 357 358 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 356 def element_screenshot(element_id) execute :take_element_screenshot, id: element_id end |
#find_element_by(how, what, parent_ref = []) ⇒ Object
For Appium override
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 241 def find_element_by(how, what, parent_ref = []) how, what = convert_locator(how, what) return execute_atom(:findElements, Support::RelativeLocator.new(what).as_json).first if how == 'relative' parent_type, parent_id = parent_ref id = case parent_type when :element execute :find_child_element, { id: parent_id }, { using: how, value: what.to_s } when :shadow_root execute :find_shadow_child_element, { id: parent_id }, { using: how, value: what.to_s } else execute :find_element, {}, { using: how, value: what.to_s } end ::Appium::Core::Element.new self, element_id_from(id) end |
#find_elements_by(how, what, parent_ref = []) ⇒ Object
For Appium override
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 261 def find_elements_by(how, what, parent_ref = []) how, what = convert_locator(how, what) return execute_atom :findElements, Support::RelativeLocator.new(what).as_json if how == 'relative' parent_type, parent_id = parent_ref ids = case parent_type when :element execute :find_child_elements, { id: parent_id }, { using: how, value: what.to_s } when :shadow_root execute :find_shadow_child_elements, { id: parent_id }, { using: how, value: what.to_s } else execute :find_elements, {}, { using: how, value: what.to_s } end ids.map { |id| ::Appium::Core::Element.new self, element_id_from(id) } end |
#get_timeouts ⇒ Object
Port from MJSONWP
205 206 207 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 205 def get_timeouts execute :get_timeouts end |
#location ⇒ Object
For Appium No implementation for W3C webdriver module called in ‘extend DriverExtensions::HasLocation’
303 304 305 306 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 303 def location obj = execute(:get_location) || {} ::Appium::Location.new obj['latitude'], obj['longitude'], obj['altitude'] end |
#log(type) ⇒ Object
For Appium No implementation for W3C webdriver module
329 330 331 332 333 334 335 336 337 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 329 def log(type) data = execute :get_log, {}, { type: type.to_s } Array(data).map do |l| ::Selenium::WebDriver::LogEntry.new l.fetch('level', 'UNKNOWN'), l.fetch('timestamp'), l.fetch('message') rescue KeyError next end end |
#log_event(vendor, event) ⇒ Object
For Appium
340 341 342 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 340 def log_event(vendor, event) execute :post_log_event, {}, { vendor: vendor, event: event } end |
#log_events(type = nil) ⇒ Object
For Appium
345 346 347 348 349 350 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 345 def log_events(type = nil) args = {} args['type'] = type unless type.nil? execute :get_log_events, {}, args end |
#network_connection ⇒ Object
For Appium override called in ‘extend DriverExtensions::HasNetworkConnection’
289 290 291 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 289 def network_connection execute :get_network_connection end |
#network_connection=(type) ⇒ Object
For Appium override called in ‘extend DriverExtensions::HasNetworkConnection’
296 297 298 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 296 def network_connection=(type) execute :set_network_connection, {}, { parameters: { type: type } } end |
#send_command(command_params) ⇒ Object
for selenium-webdriver compatibility in chrome browser session. This may be needed in selenium-webdriver 4.8 or over? (around the version) when a session starts browserName: ‘chrome’ for bridge. This method is not only for Android, but also chrome desktop browser as well. So this bridge itself does not restrict the target module.
365 366 367 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 365 def send_command(command_params) execute :chrome_send_command, {}, command_params end |
#session_capabilities ⇒ Object
Port from MJSONWP
210 211 212 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 210 def session_capabilities ::Appium::Core::Base::Capabilities.json_create execute(:get_capabilities) end |
#sessions ⇒ Object
Returns all available sessions on the Appium server instance
174 175 176 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 174 def sessions execute :get_all_sessions end |
#set_location(lat, lon, alt = 0.0, speed: nil, satellites: nil) ⇒ Object
For Appium No implementation for W3C webdriver module
310 311 312 313 314 315 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 310 def set_location(lat, lon, alt = 0.0, speed: nil, satellites: nil) loc = { latitude: lat, longitude: lon, altitude: alt } loc[:speed] = speed unless speed.nil? loc[:satellites] = satellites unless satellites.nil? execute :set_location, {}, { location: loc } end |
#status ⇒ Object
178 179 180 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 178 def status execute :status end |
#viewport_screenshot ⇒ Object
352 353 354 |
# File 'lib/appium_lib_core/common/base/bridge.rb', line 352 def execute_script('mobile: viewportScreenshot') end |