class Object
Public Instance Methods
appium_server_start(**options)
click to toggle source
# File lib/Appium.rb, line 2 def appium_server_start(**options) command = 'node /home/pi/appium/bin/appium.js' command << " --nodeconfig #{options[:config]}" if options.key?(:config) command << " -p #{options[:port]}" if options.key?(:port) command << " -bp #{options[:bp]}" if options.key?(:bp) command << " --udid #{options[:udid]}" if options.key?(:udid) command << " --automation-name #{options[:automationName]}" if options.key?(:automationName) command << " --selendroid-port #{options[:selendroidPort]}" if options.key?(:selendroidPort) command << " --webkit-debug-proxy-port #{options[:webkitDebugProxyPort] if options.key?(:webkitDebugProxyPort)}" command << " --log #{Dir.pwd}/output/#{options[:log]}" if options.key?(:log) command << " --tmp /tmp/#{options[:tmp]}" if options.key?(:tmp) command << " --chromedriver-port #{options[:cp]}" if options.key?(:cp) command << " --command-timeout 180" Dir.chdir('.') { if Gem::Platform.local.os == 'linux' pid = system(command) elsif Gem::Platform.local.os == 'darwin' `osascript -e 'tell app "Terminal" to do script "#{command}"'` `osascript -e 'tell app "Terminal" to do script " ios_webkit_debug_proxy -c #{options[:udid]}:#{options[:webkit_debug_proxy_port]} -d"` else pid = system('start ' + command) end puts 'Waiting for Appium to start up...' sleep 5 if pid.nil? puts 'Appium server did not start :(' end } end
create_dir(name)
click to toggle source
# File lib/FileSystemHelpers.rb, line 22 def create_dir(name) FileUtils::mkdir_p name end
generate_node_config(nodeDir, file_name, udid, appium_port, ip, hubIp, platform, browser)
click to toggle source
# File lib/FileSystemHelpers.rb, line 12 def generate_node_config(nodeDir, file_name, udid, appium_port, ip, hubIp, platform, browser) f = File.new(nodeDir + "/node_configs/#{file_name}", "w") f.write( JSON.generate({ capabilities: [{ udid: udid, browserName: udid, maxInstances: 1, platform: platform, deviceName: udid },{ browserName: browser, maxInstances: 1, deviceName: udid, udid: udid, seleniumProtocol: 'WebDriver', platform: platform , applicationName: udid}], configuration: { cleanUpCycle: 2000, timeout: 180000, registerCycle: 5000, proxy: "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", url: "http://#{ip}:#{appium_port}/wd/hub", host: ip, port: appium_port, maxSession: 1, register: true, hubPort: 4444, hubHost: hubIp } } ) ) f.close end
get_android_devices()
click to toggle source
# File lib/Android.rb, line 1 def get_android_devices ENV["DEVICES"] = JSON.generate((`adb devices`).lines.select { |line| line.match(/\tdevice$/) }.map.each_with_index { |line, index| { udid: line.split("\t")[0], thread: index + 1 } }) end
get_device_osv(udid)
click to toggle source
# File lib/Android.rb, line 5 def get_device_osv udid command = "adb -s #{udid} shell getprop ro.build.version.sdk" `#{command}` end
get_ios_devices()
click to toggle source
# File lib/iOS.rb, line 1 def get_ios_devices ENV["IOS_DEVICES"] = JSON.generate((`system_profiler SPUSBDataType | sed -n -E -e '/(iPhone|iPad)/,/Serial/s/ *Serial Number: *(.+)/\\1/p'`).lines.map.each_with_index { |line, index| { udid: line.gsub(/\n/,""), thread: index + 1 } }) end
get_platform()
click to toggle source
# File lib/FileSystemHelpers.rb, line 2 def get_platform() if Gem::Platform.local.os == 'darwin' return :mac elsif Gem::Platform.local.os == 'linux' return :linux else return :windows end end
launch_hub_and_nodes(ip, hubIp, nodeDir)
click to toggle source
# File lib/Appium.rb, line 36 def launch_hub_and_nodes(ip, hubIp, nodeDir) if Gem::Platform.local.os == 'darwin' ios_devices = JSON.parse(get_ios_devices) ios_devices.size.times do |index| port = 4100 + index webkit_port = 27753 + index config_name = "#{ios_devices[index]["udid"]}.json" generate_node_config nodeDir, config_name, ios_devices[index]["udid"], port, ip, hubIp, 'MAC', 'safari' node_config = nodeDir + '/node_configs/' +"#{config_name}" appium_server_start config: node_config, port: port, udid: ios_devices[index]["udid"], log: "appium-#{ios_devices[index]["udid"]}.log", tmp: ios_devices[index]["udid"], webkit_debug_proxy_port: webkit_port end else devices = JSON.parse(get_android_devices) devices.size.times do |index| port = 4000 + index bp = 2250 + index sdp = 5000 + index cp = 6000 + index sdkv = get_device_osv(devices[index]['udid']).strip.to_i config_name = "#{devices[index]["udid"]}.json" generate_node_config nodeDir, config_name, devices[index]["udid"], port, ip, hubIp, 'android', 'chrome' node_config = nodeDir + '/node_configs/' +"#{config_name}" if sdkv === 16 || sdkv === 17 appium_server_start config: node_config, port: port, bp: bp, udid: devices[index]["udid"], automationName: "selendroid", selendroidPort: sdp, tmp: devices[index]["udid"], cp: cp else appium_server_start config: node_config, port: port, bp: bp, udid: devices[index]["udid"], tmp: devices[index]["udid"], cp: cp end end end end