论坛内有人分享过类似的解决方案,但是我还是想重新整理一下,给后面的人提供更加直接的解决方案。
思路很简单
在运行 appium 初始化代码,前使用新的线程去自动点击掉那个该死的弹出框。
AppiumDriver appdriver = new AppiumDriver(new URL(urls), capabilities);
1、首先设置手机,任意键唤醒,不要设置屏幕锁,因为锁这个东西还是很烦的,appium 有时候 unlock 会失效。
2、在执行初始化前,调用我的点击方案,运行进程
3、手机上拉起了测试 APP 后,关闭进程
提供代码实例,写的简陋,请自己改良
public class IntSetUpApp extends Thread {
public static boolean flag = false;
public static boolean tapflag = false;
public static int tapx = 0;
public static int tapy = 0;
public static String devName;
public IntSetUpApp(String dev_Name) {
// TODO Auto-generated constructor stub
devName = dev_Name;
flag = true;
}
//标签,用来表示我的循环内的代码是否一致执行
public static void setflag(boolean stflag) {
flag = stflag;
}
//需要点击的地方,请自己调整
public static void settapflag(boolean stflag, int x, int y) {
tapflag = stflag;
tapx = x;
tapy = y;
}
public void run() {
try {
System.out.println(Thread.currentThread().getName() + "开始点击小米安全提示");
Runtime.getRuntime().exec(
"adb -s " + devName + " shell input keyevent 26");
while (flag) {
//这个时间根据自己的要求调整
Thread.sleep(15000);
if (tapflag) {
//循环次数也根据自己的要求调整
for (int i = 0; i < 2; i++) {
Runtime.getRuntime().exec(
"adb -s " + devName + " shell input tap "
+ tapx + " " + tapy);
// Runtime.getRuntime().exec(
// "adb -s " + devName + " shell input keyevent 26");
Thread.sleep(1500);
tapflag = false;
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
怎么调用这个方法呢?也是一个参考,如下:
// 创建一个可重用固定线程数的线程池
ExecutorService pool = Executors.newSingleThreadExecutor();
// 创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口
IntSetUpApp mp = new IntSetUpApp(deviceName);
// 将线程放入池中运行
pool.execute(mp);
// 提前进行执行
// 红米NOTE,这里的设备名,自己获取,需要点击的地方也需要自己获取,我没有
if (deviceName.equals("79S4DAOZSSSK5SZT")) {
IntSetUpApp.settapflag(true, 525, 1165);
}
//初始化你要执行的app
AppiumDriver appdriver = new AppiumDriver(new URL(urls), capabilities);
//这里的等待时间,最好跟你进程里面的时间对应起来,不然会有执行上的异常
TimeUnit.SECONDS.sleep(5);
//让进程内的循环释放,不在被占用
IntSetUpApp.setflag(false);
TimeUnit.SECONDS.sleep(10);
System.out.println("关闭小米安全提示进程");
// 关闭线程池
pool.shutdownNow();
这里写的比较简陋,java 这里处理方式,也请其他同学提供更加灵活的方式解决。