Class: Appium::Core::Base::Bridge::W3C

Inherits:
Selenium::WebDriver::Remote::W3C::Bridge
  • Object
show all
Includes:
Device::AppManagement, Device::AppState, Device::Context, Device::Device, Device::DeviceLock, Device::FileManagement, Device::ImageComparison, Device::ImeActions, Device::KeyEvent, Device::Keyboard, Device::ScreenRecord::Command, Device::Setting, Device::TouchActions, Device::Value
Defined in:
lib/appium_lib_core/common/base/bridge/w3c.rb

Constant Summary

Constants included from Device::AppState

Device::AppState::STATUS

Constants included from Device::ImageComparison

Device::ImageComparison::GET_SIMILARITY, Device::ImageComparison::MATCH_FEATURES, Device::ImageComparison::MATCH_TEMPLATE, Device::ImageComparison::MODE

Instance Method Summary collapse

Methods included from Device::TouchActions

#multi_touch, #touch_actions

Methods included from Device::Device

#device_time, #shake

Methods included from Device::ScreenRecord::Command

#stop_and_save_recording_screen, #stop_recording_screen

Methods included from Device::AppState

#app_state

Methods included from Device::AppManagement

#activate_app, #app_installed?, #app_strings, #background_app, #close_app, #install_app, #launch_app, #remove_app, #reset, #terminate_app

Methods included from Device::ImageComparison

#compare_images, #find_image_occurrence, #get_images_similarity, #match_images_features

Methods included from Device::KeyEvent

#keyevent, #long_press_keycode, #press_keycode

Methods included from Device::FileManagement

#pull_file, #pull_folder, #push_file

Methods included from Device::Value

#replace_value, #set_immediate_value

Methods included from Device::Context

#available_contexts, #current_context, #set_context, #switch_to_default_context, #within_context

Methods included from Device::Setting

#get_settings, #update_settings

Methods included from Device::ImeActions

#ime_activate, #ime_activated, #ime_active_engine, #ime_available_engines, #ime_deactivate

Methods included from Device::Keyboard

#hide_keyboard, #is_keyboard_shown

Methods included from Device::DeviceLock

#device_locked?, #lock, #unlock

Instance Method Details

#action(async = false) ⇒ Object

Perform touch actions for W3C module. Generate touch pointer action here and users can use this via driver.action

‘mouse’ action is by default in the Ruby client. Appium server force the mouse action to touch once in the server side. So we don’t consider the case.

Examples:


element = @driver.find_element(:id, "some id")
@driver.action.click(element).perform # The `click` is a part of `PointerActions`


58
59
60
61
62
63
64
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 58

def action(async = false)
  # Used for default duration of each touch actions
  # Override from 250 milliseconds to 50 milliseconds
  action_builder = super
  action_builder.default_move_duration = 0.05
  action_builder
end

#available_log_typesObject

logs

For Appium No implementation for W3C webdriver module



171
172
173
174
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 171

def available_log_types
  types = execute :get_available_log_types
  Array(types).map(&:to_sym)
end

#commands(command) ⇒ Object



35
36
37
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 35

def commands(command)
  ::Appium::Core::Commands::W3C::COMMANDS[command]
end

#element_attribute(element, name) ⇒ Object

For Appium override



103
104
105
106
107
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 103

def element_attribute(element, name)
  # For W3C in Selenium Client
  # execute_atom :getAttribute, element, name
  execute :get_element_attribute, id: element.ref, name: name
end

#element_displayed?(element) ⇒ Boolean

For Appium override



94
95
96
97
98
99
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 94

def element_displayed?(element)
  # For W3C
  # https://github.com/SeleniumHQ/selenium/commit/b618499adcc3a9f667590652c5757c0caa703289
  # execute_atom :isDisplayed, element
  execute :is_element_displayed, id: element.ref
end

#find_element_by(how, what, parent = nil) ⇒ Object

For Appium override



111
112
113
114
115
116
117
118
119
120
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 111

def find_element_by(how, what, parent = nil)
  how, what = convert_locators(how, what)

  id = if parent
         execute :find_child_element, { id: parent }, { using: how, value: what }
       else
         execute :find_element, {}, { using: how, value: what }
       end
  ::Selenium::WebDriver::Element.new self, element_id_from(id)
end

#find_elements_by(how, what, parent = nil) ⇒ Object

For Appium override



124
125
126
127
128
129
130
131
132
133
134
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 124

def find_elements_by(how, what, parent = nil)
  how, what = convert_locators(how, what)

  ids = if parent
          execute :find_child_elements, { id: parent }, { using: how, value: what }
        else
          execute :find_elements, {}, { using: how, value: what }
        end

  ids.map { |id| ::Selenium::WebDriver::Element.new self, element_id_from(id) }
end

#get_timeoutsObject

Port from MJSONWP



67
68
69
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 67

def get_timeouts
  execute :get_timeouts
end

#locationObject

For Appium No implementation for W3C webdriver module called in ‘extend DriverExtensions::HasLocation`



153
154
155
156
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 153

def location
  obj = execute(:get_location) || {}
  ::Selenium::WebDriver::Location.new obj['latitude'], obj['longitude'], obj['altitude']
end

#log(type) ⇒ Object

For Appium No implementation for W3C webdriver module



178
179
180
181
182
183
184
185
186
187
188
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 178

def log(type)
  data = execute :get_log, {}, { type: type.to_s }

  Array(data).map do |l|
    begin
      ::Selenium::WebDriver::LogEntry.new l.fetch('level', 'UNKNOWN'), l.fetch('timestamp'), l.fetch('message')
    rescue KeyError
      next
    end
  end
end

#network_connectionObject

For Appium override called in ‘extend DriverExtensions::HasNetworkConnection`



139
140
141
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 139

def network_connection
  execute :get_network_connection
end

#network_connection=(type) ⇒ Object

For Appium override called in ‘extend DriverExtensions::HasNetworkConnection`



146
147
148
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 146

def network_connection=(type)
  execute :set_network_connection, {}, { parameters: { type: type } }
end

#page_sourceObject

For Appium override



84
85
86
87
88
89
90
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 84

def page_source
  # For W3C
  # execute_script('var source = document.documentElement.outerHTML;'    # 'if (!source) { source = new XMLSerializer().serializeToString(document); }'    # 'return source;')
  execute :get_page_source
end

#send_keys_to_active_element(key) ⇒ Object

Port from MJSONWP



77
78
79
80
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 77

def send_keys_to_active_element(key)
  text = ::Selenium::WebDriver::Keys.encode(key).join('')
  execute :send_keys_to_active_element, {}, { value: text.split(//) }
end

#session_capabilitiesObject

Port from MJSONWP



72
73
74
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 72

def session_capabilities
  ::Selenium::WebDriver::Remote::W3C::Capabilities.json_create execute(:get_capabilities)
end

#sessionsObject

Returns all available sessions on the Appium server instance



40
41
42
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 40

def sessions
  execute :get_all_sessions
end

#set_location(lat, lon, alt) ⇒ Object

For Appium No implementation for W3C webdriver module called in ‘extend DriverExtensions::HasLocation`



161
162
163
164
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 161

def set_location(lat, lon, alt)
  loc = { latitude: lat, longitude: lon, altitude: alt }
  execute :set_location, {}, { location: loc }
end

#take_element_screenshot(element) ⇒ Object



194
195
196
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 194

def take_element_screenshot(element)
  execute :take_element_screenshot, id: element.ref
end

#take_viewport_screenshotObject



190
191
192
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 190

def take_viewport_screenshot
  execute_script('mobile: viewportScreenshot')
end