class ParallelAppium::Android

Connecting to Android devices

Public Instance Methods

devices() click to toggle source

Devices after cleanup and supplemental data included

# File lib/parallel_appium/android.rb, line 27
def devices
  emulators = start_emulators
  sleep 10
  devices = `adb devices`.split("\n").select { |x| x.include? "\tdevice" }.map.each_with_index { |d, i| {avd: emulators[i], platform: 'android', name: 'android', udid: d.split("\t")[0], wdaPort: 8100 + i, thread: i + 1} }
  devices = devices.map { |x| x.merge(get_android_device_data(x[:udid])) }

  ENV['DEVICES'] = JSON.generate(devices)
  devices
end
get_android_device_data(udid) click to toggle source

Get additional information for the Android device with unique identifier udid

# File lib/parallel_appium/android.rb, line 16
def get_android_device_data(udid)
  specs = { os: 'ro.build.version.release', manufacturer: 'ro.product.manufacturer', model: 'ro.product.model', sdk: 'ro.build.version.sdk' }
  hash = {}
  specs.each do |key, spec|
    value = `adb -s #{udid} shell getprop "#{spec}"`.strip
    hash.merge!(key => value.to_s)
  end
  hash
end
start_emulators() click to toggle source

Fire up the Android emulators

# File lib/parallel_appium/android.rb, line 5
def start_emulators
  emulators = `emulator -list-avds`.split("\n")
  emulators = emulators[0, ENV['THREADS'].to_i]
  Parallel.map(emulators, in_threads: emulators.size) do |emulator|
    spawn("emulator -avd #{emulator} -no-snapshot-load -scale 100dpi -no-boot-anim -no-audio -accel on &", out: '/dev/null')
  end

  emulators
end