-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexecute.js
378 lines (363 loc) · 11 KB
/
execute.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
// 程序开始运行之前判断无障碍服务
if (auto.service == null) {
toast("请先开启无障碍服务!")
sleep(1000)
app.startActivity({
action: "android.settings.ACCESSIBILITY_SETTINGS",
})
}
function ABwaitForActivity(activity, timeout, period) {
period = period || 200
var time = new Date().getTime()
while (global.currentActivity() != activity) {
if (timeout && new Date().getTime() - time >= timeout) {
return false
}
sleep(period)
}
return true
}
function ABwaitForPackage(packageName, timeout, period) {
period = period || 200
var time = new Date().getTime()
while (global.currentPackage() != packageName) {
if (timeout && new Date().getTime() - time >= timeout) {
return false
}
sleep(period)
}
return true
}
function autoStart() {
auto.waitFor()
const SHORT_WAIT = 200
const LONG_WAIT = 2000
const appName = "叮咚买菜"
launchApp(appName)
toast("开始了等2s")
sleep(LONG_WAIT)
toast("到了2s")
function textClickBtn(message) {
text(message).findOne().click()
}
const path = "res/大籽-白月光与朱砂痣.mp3"
// const path = "/storage/emulated/0/脚本/at-robFood/res/大籽-白月光与朱砂痣.mp3"
let m = media
function musicPlay() {
musicStop("开始播放前>停止音乐")
m.playMusic(path)
function mySleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}
toast("开始播放音乐")
mySleep(m.getMusicDuration())
}
function musicStop(message) {
toast(message)
m.stopMusic()
}
function hasText(text) {
return textStartsWith(text).exists() // 是否存在指定文本
}
// 跳过开屏广告
if (hasText("跳过")) {
id("tv_skip").findOnce().click()
sleep(SHORT_WAIT)
}
// 通过id点击按钮
function idClickBtn(btnId) {
id(btnId).findOnce().click()
}
// 判断页面上是否存在此 id
function idExists(existsId) {
id(existsId).exists()
}
// 去购物车页
function shoppingCartCase() {
toast("shopping")
// 进入购物车页
if (hasText("重新加载")) {
toast("重新加载")
idClickBtn("ll_reload_action").findOne().click()
sleep(2000)
return payment()
}
sleep(SHORT_WAIT)
const isCartPage = !hasText("去结算") && hasText("购物车")
if (isCartPage) {
toast("主页>进入购物车")
// 主页 -> 点击底部tabBar购物车 -> 进入购物车页
idClickBtn("rl_car_layout")
sleep(SHORT_WAIT)
confirmOrderCase()
} else if (idExists("iv_cart")) {
toast("分类>进入购物车")
// 分类-> 商品详情 -> 点击底部小购物车图标 -> 购物车页面
idClickBtn("iv_cart")
sleep(SHORT_WAIT)
confirmOrderCase()
} else if (id("iv_cart1").exists()) {
toast("吃什么>进入购物车")
// 吃什么-> 商品详情 -> 点击顶部小购物车图标 -> 购物车页面
idClickBtn("iv_cart1")
sleep(SHORT_WAIT)
confirmOrderCase()
} else if (hasText("立即支付")) {
toast(">立即支付")
// 如果在确认订单页则走payment逻辑
payment()
} else if (hasText("去结算")) {
toast(">去结算")
confirmOrderCase()
} else if (text("您选择的送达时间已经失效了,请重新选择").exists()) {
toast(">时间失效")
deliveryTimeError()
} else if (text("选择送达时间")) {
toast(">选择送达时间")
if (text("今天")) {
const hasNow =
text("今天").findOnce() &&
text("今天").findOnce().parent() &&
text("今天").findOnce().parent().children() &&
text("今天").findOnce().parent().children().length !== 1
if (hasNow) {
musicStop("选择送达时间1>停止音乐")
// 如果有时间选择,则选择时间
selectTime()
sleep(1000)
payment()
} else {
musicStop("选择送达时间2>停止音乐")
if (id("iv_dialog_select_time_close").findOne()) {
musicStop("选择送达时间关闭选择框回购物车>停止音乐")
id("iv_dialog_select_time_close").findOne().click()
// 已约满就返回购物车
back()
sleep(SHORT_WAIT)
shoppingCartCase()
} else {
musicStop("选择送达时间3>停止音乐")
back()
sleep(LONG_WAIT)
shoppingCartCase()
}
}
} else if (hasText("明天")) {
if (textStartsWith("明天").findOnce().parent().children().length) {
musicStop("选择送达时间4>停止音乐")
// 如果有时间选择,则选择时间
selectTime()
sleep(1000)
payment()
} else {
musicStop("选择送达时间5>停止音乐")
// 已约满就返回购物车
id("iv_dialog_select_time_close").findOne().click()
back()
sleep(SHORT_WAIT)
shoppingCartCase()
}
} else {
musicStop("选择送达时间>继续payment>停止音乐")
payment()
}
} else {
musicPlay()
var clear = confirm("回购物车运行脚本")
if (clear) {
musicStop("会购物车运行脚本>停止音乐")
}
}
}
// 确认订单页逻辑
function payment() {
// 弹窗提示返回购物车
if (hasText("重新加载")) {
toast(">重新加载")
idClickBtn("ll_reload_action").findOne().click()
sleep(2000)
return payCase()
}
if (hasText("继续结算")) {
toast(">继续结算")
textClickBtn("继续结算")
return payment()
}
if (hasText("返回购物车")) {
toast(">返回购物车")
back()
sleep(SHORT_WAIT)
shoppingCartCase()
} else if (hasText("立即支付")) {
toast(">立即支付1")
// 点击立即支付按钮
idClickBtn("tv_submit") // 点击立即支付按钮
if (hasText("前方拥堵")) {
toast(">前方拥堵")
sleep(2000)
}
musicPlay()
payCase()
} else {
toast(">>走购物车流程")
shoppingCartCase()
}
}
function deliveryTimeError() {
musicStop("deliveryTimeError>停止音乐")
// 送达时间不正确了,重新选择 / 基本遇不到
text("选择送达时间").findOnce().click()
// NOTE: 点击送达时间进行时间选择
sleep(SHORT_WAIT)
const times = id("cl_item_select_hour_root").find()
const clickables = times.filter((item) => item.clickable) // 可点击的时间
if (!clickables.length) {
// 如果都是不可点击则返回上一页
back()
shoppingCartCase()
} else {
// 如果有时间选择,则选择时间
payCase()
}
}
// 点击立即支付后遇到的 case
function payCase() {
toast(">>payCase")
sleep(2000)
if (hasText("继续支付")) {
toast(">>继续支付")
textClickBtn("继续支付")
sleep(SHORT_WAIT)
return payment()
}
if (hasText("重新加载")) {
toast(">>重新加载")
musicStop("重新加载>停止音乐")
idClickBtn("ll_reload_action").findOne().click()
sleep(2000)
return payCase()
}
if (hasText("立即支付")) {
toast(">>立即支付1")
// 点击立即支付按钮
idClickBtn("tv_submit") // 点击立即支付按钮
if (hasText("前方拥堵")) {
toast(">>前方拥堵")
sleep(2000)
}
musicPlay()
payCase()
return
}
if (text("您选择的送达时间已经失效了,请重新选择").exists()) {
toast(">>重新选择")
musicStop("您选择的送达时间已经失效了,请重新选择>停止音乐")
textClickBtn("选择送达时间")
payment()
} else if (hasText("返回购物车")) {
toast(">>返回购物车")
musicStop("返回购物车>停止音乐")
text("返回购物车").findOnce().click()
sleep(SHORT_WAIT)
shoppingCartCase()
} else if (text("选择送达时间")) {
toast(">>选择送达时间")
if (text("今天")) {
const hasNow =
text("今天").findOnce() &&
text("今天").findOnce().parent() &&
text("今天").findOnce().parent().children() &&
text("今天").findOnce().parent().children().length !== 1
if (hasNow) {
musicStop("选择送达时间11>停止音乐")
// 如果有时间选择,则选择时间
selectTime()
sleep(1000)
payment()
} else {
if (id("iv_dialog_select_time_close").findOne()) {
musicStop("选择送达时间22>停止音乐")
id("iv_dialog_select_time_close").findOne().click()
// 已约满就返回购物车
back()
sleep(SHORT_WAIT)
shoppingCartCase()
} else {
musicStop("选择送达时间33>停止音乐")
back()
sleep(LONG_WAIT)
shoppingCartCase()
}
}
} else if (hasText("明天")) {
if (textStartsWith("明天").findOnce().parent().children().length) {
// 如果有时间选择,则选择时间
selectTime()
sleep(1000)
payment()
} else {
// 已约满就返回购物车
id("iv_dialog_select_time_close").findOne().click()
back()
sleep(SHORT_WAIT)
shoppingCartCase()
}
} else {
musicStop("走支付流程>停止音乐")
payment()
}
} else {
toast(">>else")
alert("1231243")
musicPlay()
}
}
// 自动选择时间
function selectTime() {
const times = id("cl_item_select_hour_root").find()
times.some((item) => {
if (item.clickable) {
item.click()
}
return item.clickable
})
}
// 去确认订单页
function confirmOrderCase() {
musicStop("确认订单页流程>停止音乐")
// 已勾选的按钮会带数字,所以通过按钮文本来判断购物车中的商品是否失效,如果没有勾选,则无法进入确认订单页面。
const toSettleAccounts_btn = text("去结算").exists()
if (toSettleAccounts_btn) {
swipe(200, 590, 200, 1160, 1) // x1,y1,x2,y2,duration
toast('下拉刷新购物车,等3s')
sleep(3000)
id("vg_car")
.findOne()
.children()
.forEach((child) => {
var target = child.findOne(id("ll_left_state"))
target.click()
})
musicPlay()
sleep(SHORT_WAIT)
confirmOrderCase()
} else if (hasText("去结算(")) {
// 去确认订单页
id("btn_submit").findOnce().click()
sleep(SHORT_WAIT)
payment()
}
}
if (hasText("去结算")) {
toast("等结算流程")
ABwaitForActivity("com.yaya.zone", SHORT_WAIT)
toast("开始结算流程")
confirmOrderCase()
} else {
toast("等确认订单流程")
ABwaitForActivity("com.yaya.zone", SHORT_WAIT)
toast("开始确认订单流程")
shoppingCartCase()
}
}
autoStart()