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