最近在做APP的自动化测试,采用的是Appium方案。在测试过程中遇到了九宫格滑动解锁的问题,通过查阅相关资料,我做了一个通用的方法来处理九宫格在一个view中显示的情况。
这种情况我们只能通过定位每一个点的相对坐标来滑动,这里先获取整个九宫格所在view的位置,获取该view左上角的坐标,接下来我们需要得到两个点之间横向和纵向的距离,就能方便的计算出每个点的坐标了。
这里使用TouchAction类来进行点击滑动等操作。
/**
* 任意点数滑动解锁
* @param driver
* @param points
*/
public static void slipeToUnlock(AppiumDriver driver, int[][] points){
// 定义一个list来保存计算后的两个相邻点之间的偏移量
List<PointOption> l = new ArrayList<>();
l.add(PointOption.point(points[0][0],points[0][1]));
int n = points.length;
if (n != 0){
for (int i = 0; i < n–1; i++){
int x = points[i+1][0] – points[i][0];
int y = points[i+1][1] –points[i][1];
PointOption p1 = PointOption.point(x, y);
l.add(p1);
}
}
AndroidTouchAction s = new AndroidTouchAction(driver);
s.press(l.get(0));
for (int i = 0; i < n–1; i++){
s.waitAction().moveTo(l.get(i+1));
}
s.release().perform();
}
在这个方法中需要注意的是传入的第二个参数是一个二维数组,该二维数组中包含滑动解锁需要经过的所有点的坐标,通过查阅相关资料发现,从前一个点滑到后一个点并不是简单的坐标变换,后一个点的位置是相对于前一个点位置的偏移量,该方法会自动计算出相邻两个点之间的偏移量。然后通过调用该方法就能实现任意点数的滑动解锁。
// 部分代码
int[] p1_1 = {x + offset, y + offset};
int[] p1_2 = {x + offset*2, y + offset};
int[] p1_3 = {x + offset*3, y + offset};
int[] p2_2 = {x + offset*2, y + offset*2};
int[] p3_2 = {x + offset*2, y + offset*3};
// 滑动解锁所经过的点
int[][] points = {p1_1, p1_2, p2_2, p3_2};
// 调用滑动解锁方法
slipeToUnlock(driver, points);
刚开始研究,欢迎提供更优质的方法。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END