了解点评的都知道橙v会员的其中一项权益就是申请霸王餐,其中需要反复点击逐个申请,步骤有些繁琐,于是乎便想到通过自动化脚本来解决这个问题。
airtest/appium/autojs试了一圈,发现还是autojs比较适合这个需求,简单轻量,确定好工具,接下来就是摸清点击路径,然后通过代码自动化
第一步,启动大众点评app进入免费试频道
auto.waitFor()
const appname = '大众点评';
app.launchApp(appname);
console.log(device.width,device.height);
// 进入免费试频道
id('main_listview').waitFor();
let list = id('main_listview').findOne();
list.children()[1].children()[3].findOne(className('android.widget.ImageButton')).click();
第二步,进入vip专享活动频道,这里要说明下为什么用press而不是click,本人尝试多次,可能是这个按钮做了点击时长校验,因此只有用press。
console.log('进入vip专享活动频道');
while (text('VIP专享活动').findOne().parent().findByText("全部").size() == 0);
let allBtn = text('VIP专享活动').findOne().parent().findByText("全部").get(0).parent();
let allBtnBounds = allBtn.bounds();
press(allBtnBounds.left, allBtnBounds.top, 100);
第三步,点击免费抽按钮
console.log('开始搜索可点击的免费抽按钮');
let btn = text("免费抽").findOne(3000);
if(btn){
let bounds = btn.bounds();
press(bounds.left, bounds.top, 1);
let isOk = text('免费试活动详情').findOne(3000);
if(isOk){
console.log('点击免费抽按钮成功');
let bmBtn = text("我要报名").findOne(4000);
if(bmBtn){
bmBtn.click();
}else{
let wybmBtn = text("已报名,看看其他活动").findOne();
if(wybmBtn){
console.log('已报名,返回免费试首页');
wybmBtn.click();
}
}
}else{
console.log('点击免费抽按钮失败');
}
}else{
console.log('没有找到免费抽按钮');
}
第四步,报名填资料并提交
text('确认报名').waitFor();
// 判断是否有分店
if(text("请选择分店").exists()){
click("请选择分店",0);
className('android.widget.ListView').waitFor();
className('android.widget.ListView').findOne().child(1).click();
}
// 判断是否有套餐
if(text("请选择套餐").exists()){
click("请选择套餐",0);
className('android.widget.ListView').waitFor();
className('android.widget.ListView').findOne().child(1).click();
}
while(!click("确认报名",0));
text('报名成功').waitFor();
while(!click("回到首页",0));
当中还会有一个滚动的过程,需要用gesture方法模拟自然轨迹,用scroll是无效的,需要完整代码可点赞后留言获取