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::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/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 Attribute Summary collapse

Instance Method Summary collapse

Methods included from Device::Orientation

#screen_orientation, #screen_orientation=

Methods included from Device::ExecuteDriver

#execute_driver

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

Constructor Details

#initialize(capabilities, session_id, **opts) ⇒ W3C

Returns a new instance of W3C.



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

def initialize(capabilities, session_id, **opts)
  @available_commands = ::Appium::Core::Commands::W3C::COMMANDS.dup
  super(capabilities, session_id, **opts)
end

Instance Attribute Details

#available_commandsObject (readonly)

Returns the value of attribute available_commands.



37
38
39
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 37

def available_commands
  @available_commands
end

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'


80
81
82
83
84
85
86
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 80

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

#add_command(method:, url:, name:, &block) ⇒ Object

command for Appium 2.0.



49
50
51
52
53
54
55
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 49

def add_command(method:, url:, name:, &block)
  raise ::Appium::Core::Error::ArgumentError, "#{name} is already defined" if @available_commands.key? name

  @available_commands[name] = [method, url]

  ::Appium::Core::Device.add_endpoint_method name, &block
end

#available_log_typesObject

logs

For Appium No implementation for W3C webdriver module



201
202
203
204
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 201

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

#commands(command) ⇒ Object



44
45
46
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 44

def commands(command)
  @available_commands[command]
end

#convert_to_element(id) ⇒ ::Selenium::WebDriver::Element

For Appium

Parameters:

  • id (Hash)

    The id which can get as a response from server

Returns:



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

def convert_to_element(id)
  ::Selenium::WebDriver::Element.new self, element_id_from(id)
end

#element_attribute(element, name) ⇒ Object

For Appium override



125
126
127
128
129
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 125

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

Returns:

  • (Boolean)


116
117
118
119
120
121
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 116

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



133
134
135
136
137
138
139
140
141
142
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 133

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



146
147
148
149
150
151
152
153
154
155
156
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 146

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



89
90
91
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 89

def get_timeouts
  execute :get_timeouts
end

#locationObject

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



182
183
184
185
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 182

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



208
209
210
211
212
213
214
215
216
217
218
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 208

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

#log_event(vendor, event) ⇒ Object

For Appium



221
222
223
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 221

def log_event(vendor, event)
  execute :post_log_event, {}, { vendor: vendor, event: event }
end

#log_events(type = nil) ⇒ Object

For Appium



226
227
228
229
230
231
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 226

def log_events(type = nil)
  args = {}
  args['type'] = type unless type.nil?

  execute :get_log_events, {}, args
end

#network_connectionObject

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



168
169
170
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 168

def network_connection
  execute :get_network_connection
end

#network_connection=(type) ⇒ Object

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



175
176
177
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 175

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

#page_sourceObject

For Appium override



106
107
108
109
110
111
112
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 106

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



99
100
101
102
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 99

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



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

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

#sessionsObject

Returns all available sessions on the Appium server instance



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

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



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

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

#statusObject



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

def status
  execute :status
end

#take_element_screenshot(element) ⇒ Object



237
238
239
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 237

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

#take_viewport_screenshotObject



233
234
235
# File 'lib/appium_lib_core/common/base/bridge/w3c.rb', line 233

def take_viewport_screenshot
  execute_script('mobile: viewportScreenshot')
end