appium_connect_pi 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c9b5ba0133327b029a28aafcd20d47c90e07afdf
4
+ data.tar.gz: 797300c823520c2a2bafc9d49c1a626adc056398
5
+ SHA512:
6
+ metadata.gz: 3ba1a6da97b29d980b714c03c807f8ce0151d0f6331fc18a7192233b4ce2125f7d816e75bd76aa5aa0c921cd848b729fd73e751041745a607dbff9d74d7976ce
7
+ data.tar.gz: 08d6d09cd6f4a7959632adb7ab04256c32358e6c77399ca3bf7cddc6c1e1d2eadecd5f50e184f9090384c5e7b95701038d2910bc881d9cb329ab8d1b3e354f02
data/bin/AppiumConnect ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'AppiumConnect'
data/lib/Android.rb ADDED
@@ -0,0 +1,8 @@
1
+ def get_android_devices
2
+ 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 } })
3
+ end
4
+
5
+ def get_device_osv udid
6
+ command = "adb -s #{udid} shell getprop ro.build.version.sdk"
7
+ `#{command}`
8
+ end
data/lib/Appium.rb ADDED
@@ -0,0 +1,69 @@
1
+
2
+ def appium_server_start(**options)
3
+ command = 'node /home/pi/appium/bin/appium.js'
4
+ command << " --nodeconfig #{options[:config]}" if options.key?(:config)
5
+ command << " -p #{options[:port]}" if options.key?(:port)
6
+ command << " -bp #{options[:bp]}" if options.key?(:bp)
7
+ command << " --udid #{options[:udid]}" if options.key?(:udid)
8
+ command << " --automation-name #{options[:automationName]}" if options.key?(:automationName)
9
+ command << " --selendroid-port #{options[:selendroidPort]}" if options.key?(:selendroidPort)
10
+ command << " --log #{Dir.pwd}/output/#{options[:log]}" if options.key?(:log)
11
+ command << " --tmp /tmp/#{options[:tmp]}" if options.key?(:tmp)
12
+ command << " --chromedriver-port #{options[:cp]}" if options.key?(:cp)
13
+ command << " --command-timeout 180"
14
+ Dir.chdir('.') {
15
+ if Gem::Platform.local.os == 'linux'
16
+ pid = system('x-terminal-emulator -e ' + command)
17
+ elsif Gem::Platform.local.os == 'darwin'
18
+ `osascript -e 'tell app "Terminal" to do script "#{command}"'`
19
+ else
20
+ pid = system('start ' + command)
21
+ end
22
+
23
+ puts 'Waiting for Appium to start up...'
24
+ sleep 5
25
+
26
+ if pid.nil?
27
+ puts 'Appium server did not start :('
28
+ end
29
+ }
30
+ end
31
+
32
+
33
+
34
+ def launch_hub_and_nodes(ip, hubIp, nodeDir)
35
+
36
+
37
+ if Gem::Platform.local.os == 'darwin'
38
+
39
+ ios_devices = JSON.parse(get_ios_devices)
40
+
41
+ ios_devices.size.times do |index|
42
+ port = 4100 + index
43
+ config_name = "#{ios_devices[index]["udid"]}.json"
44
+ generate_node_config nodeDir, config_name, ios_devices[index]["udid"], port, ip, hubIp, 'MAC', 'safari'
45
+ node_config = nodeDir + '/node_configs/' +"#{config_name}"
46
+ 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"]
47
+ end
48
+
49
+ else
50
+
51
+ devices = JSON.parse(get_android_devices)
52
+
53
+ devices.size.times do |index|
54
+ port = 4000 + index
55
+ bp = 2250 + index
56
+ sdp = 5000 + index
57
+ cp = 6000 + index
58
+ sdkv = get_device_osv(devices[index]['udid']).strip.to_i
59
+ config_name = "#{devices[index]["udid"]}.json"
60
+ generate_node_config nodeDir, config_name, devices[index]["udid"], port, ip, hubIp, 'android', 'chrome'
61
+ node_config = nodeDir + '/node_configs/' +"#{config_name}"
62
+ if sdkv === 16 || sdkv === 17
63
+ appium_server_start config: node_config, port: port, bp: bp, udid: devices[index]["udid"], automationName: "selendroid", selendroidPort: sdp, log: "appium-#{devices[index]["udid"]}.log", tmp: devices[index]["udid"], cp: cp
64
+ else
65
+ appium_server_start config: node_config, port: port, bp: bp, udid: devices[index]["udid"], log: "appium-#{devices[index]["udid"]}.log", tmp: devices[index]["udid"], cp: cp
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,71 @@
1
+ #Copyright © 2016 Orasi Software, Inc., All rights reserved.
2
+
3
+ require 'parallel'
4
+ require 'json'
5
+ require 'fileutils'
6
+ require_relative 'FileSystemHelpers'
7
+ require_relative 'Android'
8
+ require_relative 'Appium'
9
+ require_relative 'iOS.rb'
10
+
11
+
12
+ platform = get_platform()
13
+ if platform == :linux
14
+ nodeConfigDir = File.expand_path('~/AppiumConnect/')
15
+ elsif platform == :mac
16
+ nodeConfigDir = File.expand_path('~/AppiumConnect/')
17
+ elsif platform == :windows
18
+ nodeConfigDir = Dir.home() + '/AppiumConnect'
19
+ end
20
+
21
+ create_dir nodeConfigDir
22
+ create_dir nodeConfigDir + '/node_configs'
23
+ create_dir nodeConfigDir + '/output'
24
+
25
+
26
+ if File.exist?(nodeConfigDir + '/config.json')
27
+ config = JSON.parse(File.read(nodeConfigDir +'/config.json'))
28
+
29
+ puts ''
30
+ puts 'Config file detected. Press enter to use last setting or any other key to edit:'
31
+ puts "Hub: #{config['hubIp']} Node: #{config['nodeIp']}"
32
+
33
+ if gets.chomp() != ''
34
+
35
+ puts ''
36
+ puts 'Please Enter IP address of Hub:'
37
+ hubIp = gets.chomp()
38
+
39
+ puts ''
40
+ puts ''
41
+ puts 'Please Enter IP address of Node:'
42
+
43
+ ip = gets.chomp()
44
+
45
+ config = {hubIp: hubIp, nodeIp: ip}
46
+ File.open(nodeConfigDir + '/config.json', 'w') do |f|
47
+ f.write(config.to_json)
48
+ end
49
+
50
+ end
51
+ else
52
+
53
+ puts ''
54
+ puts 'Please Enter IP address of Hub:'
55
+ hubIp = gets.chomp()
56
+
57
+ puts ''
58
+ puts ''
59
+ puts 'Please Enter IP address of Node:'
60
+ ip = gets.chomp()
61
+
62
+ config = {hubIp: hubIp, nodeIp: ip}
63
+
64
+ File.open(nodeConfigDir + '/config.json', 'w') do |f|
65
+ f.write(config.to_json)
66
+ end
67
+
68
+ end
69
+
70
+
71
+ launch_hub_and_nodes config[:nodeIp], config[:hubIp], nodeConfigDir
@@ -0,0 +1,24 @@
1
+
2
+ def get_platform()
3
+ if Gem::Platform.local.os == 'darwin'
4
+ return :mac
5
+ elsif Gem::Platform.local.os == 'linux'
6
+ return :linux
7
+ else
8
+ return :windows
9
+ end
10
+ end
11
+
12
+ def generate_node_config(nodeDir, file_name, udid, appium_port, ip, hubIp, platform, browser)
13
+ f = File.new(nodeDir + "/node_configs/#{file_name}", "w")
14
+
15
+ 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}],
16
+ configuration: { cleanUpCycle: 2000, timeout: 180000, registerCycle: 5000, proxy: "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", url: "http://#{ip}:#{appium_port}/wd/hub",
17
+ host: ip, port: appium_port, maxSession: 1, register: true, hubPort: 4444, hubHost: hubIp } } ) )
18
+ f.close
19
+ end
20
+
21
+
22
+ def create_dir(name)
23
+ FileUtils::mkdir_p name
24
+ end
data/lib/iOS.rb ADDED
@@ -0,0 +1,3 @@
1
+ def get_ios_devices
2
+ 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 } })
3
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: appium_connect_pi
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.12
5
+ platform: ruby
6
+ authors:
7
+ - Matt Watson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Looks for USB Connected devices and registers them as Appium Nodes on
14
+ Selenium Grid
15
+ email: Watson.Mattc@gmail.com
16
+ executables:
17
+ - AppiumConnect
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - bin/AppiumConnect
22
+ - lib/Android.rb
23
+ - lib/Appium.rb
24
+ - lib/AppiumConnect.rb
25
+ - lib/FileSystemHelpers.rb
26
+ - lib/iOS.rb
27
+ homepage: https://github.com/Mattwhooo/AppiumConnect
28
+ licenses:
29
+ - MIT
30
+ metadata: {}
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 2.4.6
48
+ signing_key:
49
+ specification_version: 4
50
+ summary: Quickly Connect USB connected device to Selenium Grid
51
+ test_files: []