tabbyx 0.1.4

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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/bin/console +14 -0
  3. data/bin/setup +8 -0
  4. data/lib/tabbyx.rb +29 -0
  5. data/lib/tabbyx/calabash_android.rb +11 -0
  6. data/lib/tabbyx/calabash_ios.rb +4 -0
  7. data/lib/tabbyx/core/base.rb +54 -0
  8. data/lib/tabbyx/core/config.rb +36 -0
  9. data/lib/tabbyx/core/initialize.rb +35 -0
  10. data/lib/tabbyx/fixtures/constants.rb +21 -0
  11. data/lib/tabbyx/fixtures/global.rb +39 -0
  12. data/lib/tabbyx/helpers/csv_helper.rb +65 -0
  13. data/lib/tabbyx/helpers/debug_helper.rb +37 -0
  14. data/lib/tabbyx/helpers/excel_helper.rb +79 -0
  15. data/lib/tabbyx/helpers/http_batch_handler.rb +50 -0
  16. data/lib/tabbyx/helpers/http_helper.rb +46 -0
  17. data/lib/tabbyx/helpers/minitest_helper.rb +48 -0
  18. data/lib/tabbyx/helpers/screenshot_helpers.rb +128 -0
  19. data/lib/tabbyx/helpers/txt_helper.rb +35 -0
  20. data/lib/tabbyx/steps_android/assert_steps.rb +31 -0
  21. data/lib/tabbyx/steps_android/check_box_steps.rb +3 -0
  22. data/lib/tabbyx/steps_android/context_menu_steps.rb +17 -0
  23. data/lib/tabbyx/steps_android/date_picker_steps.rb +8 -0
  24. data/lib/tabbyx/steps_android/enter_text_steps.rb +23 -0
  25. data/lib/tabbyx/steps_android/location_steps.rb +7 -0
  26. data/lib/tabbyx/steps_android/navigation_steps.rb +47 -0
  27. data/lib/tabbyx/steps_android/press_button_steps.rb +39 -0
  28. data/lib/tabbyx/steps_android/progress_steps.rb +51 -0
  29. data/lib/tabbyx/steps_android/search_steps.rb +7 -0
  30. data/lib/tabbyx/steps_android/spinner_steps.rb +11 -0
  31. data/lib/tabbyx/steps_ios/assertions.rb +79 -0
  32. data/lib/tabbyx/steps_ios/date_picker.rb +39 -0
  33. data/lib/tabbyx/steps_ios/operations.rb +187 -0
  34. data/lib/tabbyx/steps_ios/wait.rb +48 -0
  35. data/lib/tabbyx/utils/adb_devices.rb +248 -0
  36. data/lib/tabbyx/utils/adb_screenshot.rb +22 -0
  37. data/lib/tabbyx/utils/code_coverage.rb +6 -0
  38. data/lib/tabbyx/utils/shell.rb +32 -0
  39. data/lib/tabbyx/version.rb +3 -0
  40. metadata +286 -0
@@ -0,0 +1,248 @@
1
+ # adb_devices.rb 用Ruby封装了常用的Android SDK提供的adb命令,在Android测试脚本中可以随时随地使用
2
+
3
+ require 'tabbyx/utils/shell'
4
+
5
+ module ADBDevices
6
+
7
+ def self.adb_devices
8
+ Shell.adb_log("wait-for-device")
9
+ end
10
+
11
+ # 获取设备的id号
12
+ def self.get_device_id
13
+ Shell.adb_shell_log("getprop ro.boot.serialno")
14
+ end
15
+
16
+ # 获取设备中Android的版本号
17
+ def self.get_android_version
18
+ Shell.adb_shell_log("getprop ro.build.version.release")
19
+ end
20
+
21
+ # 获取设备中SDK的版本号
22
+ def self.get_sdk_version
23
+ Shell.adb_shell_log("getprop ro.build.version.sdk")
24
+ end
25
+
26
+ # 获取设备屏幕的分辨率
27
+ # 返回分辨率数组
28
+ def self.get_screen_resolution
29
+ resolution = []
30
+ outputs = Shell.adb_shell("dumpsys display | grep PhysicalDisplayInfo").scan(/([0-9]+)/)
31
+ puts outputs
32
+ resolution.push(outputs[0])
33
+ resolution.push(outputs[1])
34
+ resolution
35
+ end
36
+
37
+ # 返回设备电池电量
38
+ def self.get_battery_level
39
+ Shell.adb_shell("dumpsys battery | grep level").split(": ")[1]
40
+ end
41
+
42
+ # 返回设备电池温度
43
+ def self.get_battery_temperature
44
+ temp = Shell.adb_shell("dumpsys battery | grep temperature").split(": ")[1]
45
+ temp.to_i/10.0
46
+ end
47
+
48
+ # 获取电池充电状态: 返回状态数值
49
+ def self.get_battery_status
50
+ status = Shell.adb_shell("dumpsys battery | grep status").split(": ")[1].to_i
51
+ case status
52
+ when 1
53
+ string = "1 : BATTERY_STATUS_UNKNOWN, 未知状态"
54
+ when 2
55
+ string = "2 : BATTERY_STATUS_CHARGING,充电状态"
56
+ when 3
57
+ string = "3 : BATTERY_STATUS_DISCHARGING, 放电状态"
58
+ when 4
59
+ string = "4 : BATTERY_STATUS_NOT_CHARGING, 未充电"
60
+ when 5
61
+ string = "5 : BATTERY_STATUS_FULL, 充电已满"
62
+ else
63
+ raise("错误的状态!")
64
+ end
65
+ string
66
+ end
67
+
68
+ # 获取设备上当前界面的package和activity
69
+ def self.get_focused_package_activity
70
+ pattern = "([a-zA-Z0-9.]+/.[a-zA-Z0-9.]+)"
71
+ app = Shell.adb_shell("dumpsys input | grep FocusedApplication").scan(/#{pattern}/)[0]
72
+ if app.nil?
73
+ activity = Shell.adb_shell("dumpsys window w | grep \\/ | grep name=").scan(/#{pattern}/)[0]
74
+ activity
75
+ else
76
+ app
77
+ end
78
+ end
79
+
80
+ # 获取设备上当前界面的包名
81
+ def self.get_current_package_name
82
+ self.get_focused_package_activity[0].split("/")[0]
83
+ end
84
+
85
+ # 获取设备上当前界面的activity
86
+ def self.get_current_activity
87
+ self.get_focused_package_activity[0].split("/")[1]
88
+ end
89
+
90
+ # 应用对应的包名, 返回pid值
91
+ def self.get_pid(package_name)
92
+ num = Shell.adb_shell("ps | grep -w " << package_name).scan(/([\" \"][0-9]+)/)
93
+ raise("应用包名不存在或者进程未开启...") if num.nil?
94
+ num[0]
95
+ end
96
+
97
+ # 进程被杀死,返回true,否则返回出错提示信息
98
+ def self.kill_process(pid)
99
+ out = Shell.adb_shell("kill " << pid)
100
+ (out == "") ? true : out
101
+ end
102
+
103
+ # 退出当前应用
104
+ def self.stop_current_app
105
+ Shell.adb_shell("am force-stop " << self.get_current_package_name)
106
+ end
107
+
108
+ # 清除应用的用户数据,清楚成功返回true, 否则返回false
109
+ # package_name 应用的包名
110
+ def self.clear_app_data(package_name)
111
+ outputs = Shell.adb_shell("pm clear " << package_name)
112
+ (outputs == "Success") ? true : false
113
+ end
114
+
115
+ # 重置当前应用,清除当前应用的数据且重启该应用
116
+ def self.reset_current_app
117
+ clear_app_data(ADBDevices.get_current_package_name)
118
+ end
119
+
120
+ # 安装应用
121
+ # app_path, app的存放路径
122
+ def self.install_app(app_path)
123
+ Shell.adb("install -r " << app_path).to_s
124
+ end
125
+
126
+ # 卸载指定应用
127
+ # package_name, 应用包名,非apk名
128
+ def self.uninstall_app(package_name)
129
+ outputs = Shell.adb("uninstall " << package_name).to_s
130
+ if outputs.include?("Success")
131
+ return true
132
+ else
133
+ return outputs
134
+ end
135
+ end
136
+
137
+ # 获取设备中的第三方应用列表
138
+ def self.get_installed_apps_list
139
+ app = []
140
+ outputs = Shell.adb_shell("pm list packages -3")
141
+ outputs.split("\n").each {|out| app.push out.split(":")[1].strip}
142
+ app
143
+ end
144
+
145
+ # 获取设备中的系统应用列表
146
+ def self.get_system_apps_list
147
+ app = []
148
+ outputs = Shell.adb_shell("pm list packages -s")
149
+ outputs.split("\n").each {|out| app.push out.split(":")[1].strip}
150
+ app
151
+ end
152
+
153
+ # 判断应用是否已经安装,已安装,返回true,否则返回false
154
+ # package_name 包名
155
+ def self.is_install?(package_name)
156
+ get_installed_apps_list.each do |app|
157
+ return true if app == package_name
158
+ end
159
+ get_system_apps_list.each do |app|
160
+ return true if app == package_name
161
+ end
162
+ false
163
+ end
164
+
165
+ # 重启设备
166
+ def self.reboot_device
167
+ Shell.adb("reboot")
168
+ end
169
+
170
+ # 重启设备
171
+ def self.bootload_device
172
+ Shell.adb("reboot bootloader")
173
+ end
174
+
175
+ # 启动一个应用
176
+ # component: 应用包名加主类名,packageName/Activity
177
+ def self.start_activity(component)
178
+ Shell.adb_shell("am start -n " << component)
179
+ end
180
+
181
+ # 获取启动应用所花的时间,单位 ms
182
+ # component: 应用包名加主类名,packageName/Activity
183
+ def self.get_app_startup_time(component)
184
+ out = Shell.adb_shell("am start -W " << component << " | grep TotalTime").split(": ")[1]
185
+ unless out.nil?
186
+ out.rstrip << 'ms'
187
+ else
188
+ raise("ERROR: 没有获取到应用启动时间!")
189
+ end
190
+ end
191
+
192
+ # 复制设备上的文件至本地
193
+ # remote_file_path : 手机上文件所存储的路径
194
+ # local_path: 本地文件夹路径
195
+ def self.pull_file(remote_file_path,local_path)
196
+ Shell.adb("pull " << remote_file_path << " " << local_path)
197
+ end
198
+
199
+ # 推送本地文件至设备
200
+ # local_file_path: 本地文件路径
201
+ # remote_path: 手机上文件夹路径
202
+ def self.push_file(local_file_path,remote_path)
203
+ Shell.adb("push " << local_file_path << " " << remote_path)
204
+ end
205
+
206
+ # 删除手机上tmp文件下临时存储的apk安装包
207
+ def self.remove_all_apks
208
+ Shell.adb_shell("rm /data/local/tmp/*.apk")
209
+ end
210
+
211
+ # 运行 指定UIautomator测试脚本
212
+ def self.run_android_test_by_class(class_name, package_name)
213
+ shell = "am instrument -w -r -e debug false -e class " << class_name << " " << package_name << ".test/android.support.test.runner.AndroidJUnitRunner"
214
+ puts shell
215
+ outputs = Shell.adb_shell(shell)
216
+ puts outputs
217
+ end
218
+
219
+ # 运行 UIautomator测试脚本
220
+ def self.run_android_test(package_name)
221
+ shell = "am instrument -w -r -e debug false -e package " << package_name << " " << package_name << ".test/android.support.test.runner.AndroidJUnitRunner"
222
+ outputs = Shell.adb_shell(shell)
223
+ puts outputs
224
+ end
225
+
226
+ # 更多操作命令
227
+
228
+ # 使用默认浏览器打开一个网页
229
+ def self.visit_web(url)
230
+ Shell.adb_shell("am start -a android.intent.action.VIEW -d " << url)
231
+ end
232
+
233
+ # 拨打号码
234
+ def self.make_call(phone_number)
235
+ Shell.adb_shell("am start -a android.intent.action.CALL -d tel:" << phone_number)
236
+ end
237
+
238
+ # 按键
239
+ def self.send_key(key_code)
240
+ Shell.adb_shell("input keyevent " << key_code)
241
+ end
242
+
243
+ # 唤醒屏幕
244
+ def self.awake_screen
245
+ send_key("26")
246
+ end
247
+
248
+ end
@@ -0,0 +1,22 @@
1
+ # adb_screenshot.rb 封装了adb提供的截屏功能
2
+
3
+ require 'tabbyx/utils/shell'
4
+ require 'tabbyx/fixtures/constants'
5
+
6
+ module ADBScreenShot
7
+
8
+ def self.take_screenshot(image_name)
9
+ temp_path = File.absolute_path(SCREENSHOT_TEMP)+"/"
10
+ puts temp_path
11
+ Shell.adb_shell("screencap -p /data/local/tmp/" << image_name << ".png")
12
+ Shell.adb("pull /data/local/tmp/" << image_name << ".png " << temp_path)
13
+ Shell.adb_shell("rm /data/local/tmp/*.png")
14
+ end
15
+
16
+ def self.get_sub_image(up_left_x,up_left_y,bottom_right_x,bottom_right_y)
17
+ #TODO
18
+ end
19
+
20
+ end
21
+
22
+ # ADBScreenShot.take_screenshot("90")
@@ -0,0 +1,6 @@
1
+ # require this file if you want to use code coverage
2
+
3
+ require 'simplecov'
4
+
5
+ # Code coverage for test cases out of features
6
+ SimpleCov.start
@@ -0,0 +1,32 @@
1
+
2
+ module Shell
3
+
4
+ def self.adb(cmd)
5
+ `adb #{cmd}`
6
+ end
7
+
8
+ def self.adb_shell(cmd)
9
+ `adb shell #{cmd}`
10
+ end
11
+
12
+ def self.process(cmd)
13
+ `#{cmd}`
14
+ end
15
+
16
+ def self.date
17
+ IO.popen("date") { |f| f.gets }
18
+ end
19
+
20
+ def self.adb_log(cmd)
21
+ outputs = `adb #{cmd}`
22
+ puts outputs
23
+ outputs
24
+ end
25
+
26
+ def self.adb_shell_log(cmd)
27
+ outputs = `adb shell #{cmd}`
28
+ puts outputs
29
+ outputs
30
+ end
31
+
32
+ end
@@ -0,0 +1,3 @@
1
+ module Tabbyx
2
+ VERSION = "0.1.4"
3
+ end
metadata ADDED
@@ -0,0 +1,286 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tabbyx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
5
+ platform: ruby
6
+ authors:
7
+ - angelia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-04-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cucumber
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.14'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.14'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-reporters
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.5.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.5.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: calabash-common
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.0.2
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 0.0.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: calabash-android
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: calabash-cucumber
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 0.20.4
118
+ - - "<"
119
+ - !ruby/object:Gem::Version
120
+ version: '2.0'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 0.20.4
128
+ - - "<"
129
+ - !ruby/object:Gem::Version
130
+ version: '2.0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: gruff
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 0.7.0
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: 0.7.0
145
+ - !ruby/object:Gem::Dependency
146
+ name: selenium-webdriver
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">"
150
+ - !ruby/object:Gem::Version
151
+ version: 3.0.0
152
+ type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">"
157
+ - !ruby/object:Gem::Version
158
+ version: 3.0.0
159
+ - !ruby/object:Gem::Dependency
160
+ name: capybara
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: 2.10.1
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: 2.10.1
173
+ - !ruby/object:Gem::Dependency
174
+ name: httparty
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: 0.14.0
180
+ type: :runtime
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: 0.14.0
187
+ - !ruby/object:Gem::Dependency
188
+ name: simplecov
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :runtime
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: rubyXL
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: 3.3.21
208
+ type: :runtime
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: 3.3.21
215
+ description: an agile testing framework supports testing web and mobile apps,including
216
+ Android and iOS.
217
+ email:
218
+ - angeliawang@me.com
219
+ executables:
220
+ - console
221
+ - setup
222
+ extensions: []
223
+ extra_rdoc_files: []
224
+ files:
225
+ - bin/console
226
+ - bin/setup
227
+ - lib/tabbyx.rb
228
+ - lib/tabbyx/calabash_android.rb
229
+ - lib/tabbyx/calabash_ios.rb
230
+ - lib/tabbyx/core/base.rb
231
+ - lib/tabbyx/core/config.rb
232
+ - lib/tabbyx/core/initialize.rb
233
+ - lib/tabbyx/fixtures/constants.rb
234
+ - lib/tabbyx/fixtures/global.rb
235
+ - lib/tabbyx/helpers/csv_helper.rb
236
+ - lib/tabbyx/helpers/debug_helper.rb
237
+ - lib/tabbyx/helpers/excel_helper.rb
238
+ - lib/tabbyx/helpers/http_batch_handler.rb
239
+ - lib/tabbyx/helpers/http_helper.rb
240
+ - lib/tabbyx/helpers/minitest_helper.rb
241
+ - lib/tabbyx/helpers/screenshot_helpers.rb
242
+ - lib/tabbyx/helpers/txt_helper.rb
243
+ - lib/tabbyx/steps_android/assert_steps.rb
244
+ - lib/tabbyx/steps_android/check_box_steps.rb
245
+ - lib/tabbyx/steps_android/context_menu_steps.rb
246
+ - lib/tabbyx/steps_android/date_picker_steps.rb
247
+ - lib/tabbyx/steps_android/enter_text_steps.rb
248
+ - lib/tabbyx/steps_android/location_steps.rb
249
+ - lib/tabbyx/steps_android/navigation_steps.rb
250
+ - lib/tabbyx/steps_android/press_button_steps.rb
251
+ - lib/tabbyx/steps_android/progress_steps.rb
252
+ - lib/tabbyx/steps_android/search_steps.rb
253
+ - lib/tabbyx/steps_android/spinner_steps.rb
254
+ - lib/tabbyx/steps_ios/assertions.rb
255
+ - lib/tabbyx/steps_ios/date_picker.rb
256
+ - lib/tabbyx/steps_ios/operations.rb
257
+ - lib/tabbyx/steps_ios/wait.rb
258
+ - lib/tabbyx/utils/adb_devices.rb
259
+ - lib/tabbyx/utils/adb_screenshot.rb
260
+ - lib/tabbyx/utils/code_coverage.rb
261
+ - lib/tabbyx/utils/shell.rb
262
+ - lib/tabbyx/version.rb
263
+ homepage: https://github.com/angeliaw/tabbyx
264
+ licenses: []
265
+ metadata: {}
266
+ post_install_message:
267
+ rdoc_options: []
268
+ require_paths:
269
+ - lib
270
+ required_ruby_version: !ruby/object:Gem::Requirement
271
+ requirements:
272
+ - - ">="
273
+ - !ruby/object:Gem::Version
274
+ version: '0'
275
+ required_rubygems_version: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - ">="
278
+ - !ruby/object:Gem::Version
279
+ version: '0'
280
+ requirements: []
281
+ rubyforge_project:
282
+ rubygems_version: 2.4.8
283
+ signing_key:
284
+ specification_version: 4
285
+ summary: an agile mobile test framework.
286
+ test_files: []