求助各位技术大佬
本人是小白,刚学习完理论知识,现在处于新手上路阶段.思路比较单一, 最近在写启动微博的代码,现在遇到问题了求助各位大佬! 还望大佬指点迷津.❤我的需求是这样的:
1.从脚本的界面一键启动, 代码通过包名自动打开APP
2.判断是否成功启动, 因为包名启动有个前提就是APP要处于后台运行状态才能正常启动
3.如正常启动,微博APP会出现两种情况,一是如果退出后台时间不长,会直接进入到主界面. 二是会出现一个开屏广告,再到达主界面
4.对两种不同的情况作判断,直接到达主界面就toast输出成功启动, 弹开屏广告就点击跳过再toast输出.
5.如果APP没有处于后台启动失败toast输出
❤遇到的难题:
直接进主界面和开屏广告都属于正常启动的范围,我应该用什么方法来判断这两种情况并toast输出或者点击跳过按钮,最终到达APP主界面.我用if和Switch写了两组都不行(想了一晚上太难了:'()
第一种代码如下:
let wbApp = 'com.sina.weibo';
utils.openApp(wbApp)
sleep(2000);
var 微博广告 = text('跳过');
let 微博开屏广告 = 微博广告.getOneNodeInfo(2000);
if (微博开屏广告) {
微博开屏广告.click()
toast('成功跳过烦人的广告');
}else if (!微博开屏广告) {
toast('居然没广告');
}else toast('点击跳过失败, 广告真烦人');
sleep(3000);
if (wbApp != null) {
let homePage = id('com.sina.weibo:id/titleBack');
let wbHomePaget = has(homePage);
if (wbHomePaget) {
toast('到达首页');
logd('应用版本号:' + utils.getAppVersionName(wbApp));
} else {
toast(' 启动失败\n请先手动开启一次App激活后台\n 再从我们的软件启动功能');
}
}
是否成功到达首页我是取下面节点id来判断, 但是这串代码有个BUG如果在启动失败的情况下,也会toast提示'居然没广告',(我思考了很久最终把自己思维搞死了也没想明白判断广告的if语句应该放在哪个位置才不会出现这种情况,对于强迫症来说实在受不了,另外也是为了在学习的初期养成良好的码字习惯,于是我写了第二种switch语句)
let wbApp = 'com.sina.weibo';
utils.openApp(wbApp)
sleep(2000);
// let 启动微博 = text('广告').id('com.sina.weibo:id/main_radio');
// let 启动成功 = 启动微博.getOneNodeInfo(2000);
let 出现广告 = text('广告').getOneNodeInfo(2000);
let 直接到达= id('com.sina.weibo:id/main_radio').getOneNodeInfo(2000);
switch (出现广告) {
case :
let 微博广告 = text('跳过');
let 微博开屏广告 = 微博广告.getOneNodeInfo(0);
if (微博开屏广告) {
微博开屏广告.click()
toast('成功跳过烦人的广告');
logd('应用版本号:' + utils.getAppVersionName(wbApp));
}
break;
case :
if (wbApp != null) {
let 进入微博 = id('com.sina.weibo:id/main_radio');
let 微博主界面 = has(进入微博);
if (微博主界面) {
toast('微博启动成功, 居然没广告'); //进入App主页
logd('应用版本号:' + utils.getAppVersionName(wbApp));
}
default:
break
}
这里有个疑问, 开屏广告的text属性是不是不能和主界面的id属性定义一个对象?(注释掉的位置)
用Switch写着写着发现更不会了,导致代码都没写完就来发帖求救,还请大佬帮我理一下思路,指明方向 启动之后判断当前界面的包名是否为你的目标应用包名
启动APP 失败的情况可以 在论坛搜索 启动APP 替代办法
页:
[1]