shenwei 发表于 2022-10-25 15:51:54

求助各位技术大佬

本人是小白,刚学习完理论知识,现在处于新手上路阶段.思路比较单一, 最近在写启动微博的代码,现在遇到问题了求助各位大佬! 还望大佬指点迷津.
❤我的需求是这样的:
1.从脚本的界面一键启动, 代码通过包名自动打开APP
2.判断是否成功启动, 因为包名启动有个前提就是APP要处于后台运行状态才能正常启动
3.如正常启动,微博APP会出现两种情况,一是如果退出后台时间不长,会直接进入到主界面.   二是会出现一个开屏广告,再到达主界面
4.对两种不同的情况作判断,直接到达主界面就toast输出成功启动, 弹开屏广告就点击跳过再toast输出.
5.如果APP没有处于后台启动失败toast输出
❤遇到的难题:
直接进主界面和开屏广告都属于正常启动的范围,我应该用什么方法来判断这两种情况并toast输出或者点击跳过按钮,最终到达APP主界面.我用if和Switch写了两组都不行(想了一晚上太难了:'()



shenwei 发表于 2022-10-25 15:54:00

第一种代码如下:
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语句)

shenwei 发表于 2022-10-25 15:56:15

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写着写着发现更不会了,导致代码都没写完就来发帖求救,还请大佬帮我理一下思路,指明方向

Mr_老鬼 发表于 2022-10-25 16:07:26

启动之后判断当前界面的包名是否为你的目标应用包名
启动APP 失败的情况可以 在论坛搜索 启动APP 替代办法
页: [1]
查看完整版本: 求助各位技术大佬