在开发的过程中会遇到自动测试功能,比如如何自动点击按钮进行测试,当然可以使用按键精灵等工具进行测试,不过如何在程序进程中测试呢,下面就介绍下adb shell的操作,通过shell进行点击等操作。
1.模拟滑动
input swipe startX startY endX endY duration(ms)
2.单击某点
input tap x y
3.长按某点
input touchscreen swipe x y x y duration(ms)
4.单击某个键
input keyevent keyCode
5.长按某个键
input keyevent --longpress keyCode
一、如下以点击为例,传入当期点所在屏幕位置或者比例
package cn.test.autotouch;import android.app.Activity;
import java.io.IOException;public class AutoTouch {public int width = 0;public int height = 0;/*** 传入在屏幕中的比例位置,坐标左上角为基准* @param act 传入Activity对象* @param ratioX 需要点击的x坐标在屏幕中的比例位置* @param ratioY 需要点击的y坐标在屏幕中的比例位置*/public void autoClickRatio(Activity act, final double ratioX, final double ratioY) {width = act.getWindowManager().getDefaultDisplay().getWidth();height = act.getWindowManager().getDefaultDisplay().getHeight();new Thread(new Runnable() {@Overridepublic void run() {// 线程睡眠0.3stry {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}// 生成点击坐标int x = (int) (width * ratioX);int y = (int) (height * ratioY);// 利用ProcessBuilder执行shell命令String[] order = { "input", "tap", "" + x, "" + y };try {new ProcessBuilder(order).start();} catch (IOException e) {e.printStackTrace();}}}).start();}/*** 传入在屏幕中的坐标,坐标左上角为基准* @param act 传入Activity对象* @param x 需要点击的x坐标* @param y 需要点击的x坐标*/public void autoClickPos(Activity act, final double x, final double y) {width = act.getWindowManager().getDefaultDisplay().getWidth();height = act.getWindowManager().getDefaultDisplay().getHeight();new Thread(new Runnable() {@Overridepublic void run() {// 线程睡眠0.3stry {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}// 利用ProcessBuilder执行shell命令String[] order = { "input", "tap", "" + x, "" + y };try {new ProcessBuilder(order).start();} catch (IOException e) {e.printStackTrace();}}}).start();}
}
二、使用方法
/***************************定义*****************************///声明一个Activitypublic static Activity staticActivity;//初始化AutoTouch对象public static AutoTouch autoTouch = new AutoTouch();//在onCreate中对staticActivity赋值staticActivity = this;/***************************使用*****************************///传入所在比例autoTouch.autoClickRatio(staticActivity, 0.4375, 0.537); //出入坐标autoTouch.autoClickPos(staticActivity, 840, 580);