tabbyx 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/tabbyx.rb +29 -0
- data/lib/tabbyx/calabash_android.rb +11 -0
- data/lib/tabbyx/calabash_ios.rb +4 -0
- data/lib/tabbyx/core/base.rb +54 -0
- data/lib/tabbyx/core/config.rb +36 -0
- data/lib/tabbyx/core/initialize.rb +35 -0
- data/lib/tabbyx/fixtures/constants.rb +21 -0
- data/lib/tabbyx/fixtures/global.rb +39 -0
- data/lib/tabbyx/helpers/csv_helper.rb +65 -0
- data/lib/tabbyx/helpers/debug_helper.rb +37 -0
- data/lib/tabbyx/helpers/excel_helper.rb +79 -0
- data/lib/tabbyx/helpers/http_batch_handler.rb +50 -0
- data/lib/tabbyx/helpers/http_helper.rb +46 -0
- data/lib/tabbyx/helpers/minitest_helper.rb +48 -0
- data/lib/tabbyx/helpers/screenshot_helpers.rb +128 -0
- data/lib/tabbyx/helpers/txt_helper.rb +35 -0
- data/lib/tabbyx/steps_android/assert_steps.rb +31 -0
- data/lib/tabbyx/steps_android/check_box_steps.rb +3 -0
- data/lib/tabbyx/steps_android/context_menu_steps.rb +17 -0
- data/lib/tabbyx/steps_android/date_picker_steps.rb +8 -0
- data/lib/tabbyx/steps_android/enter_text_steps.rb +23 -0
- data/lib/tabbyx/steps_android/location_steps.rb +7 -0
- data/lib/tabbyx/steps_android/navigation_steps.rb +47 -0
- data/lib/tabbyx/steps_android/press_button_steps.rb +39 -0
- data/lib/tabbyx/steps_android/progress_steps.rb +51 -0
- data/lib/tabbyx/steps_android/search_steps.rb +7 -0
- data/lib/tabbyx/steps_android/spinner_steps.rb +11 -0
- data/lib/tabbyx/steps_ios/assertions.rb +79 -0
- data/lib/tabbyx/steps_ios/date_picker.rb +39 -0
- data/lib/tabbyx/steps_ios/operations.rb +187 -0
- data/lib/tabbyx/steps_ios/wait.rb +48 -0
- data/lib/tabbyx/utils/adb_devices.rb +248 -0
- data/lib/tabbyx/utils/adb_screenshot.rb +22 -0
- data/lib/tabbyx/utils/code_coverage.rb +6 -0
- data/lib/tabbyx/utils/shell.rb +32 -0
- data/lib/tabbyx/version.rb +3 -0
- 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,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
|
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: []
|