
最近在做APP的自动化测试,采用的是Appium方案。在测试过程中遇到了九宫格滑动解锁的问题,通过查阅相关资料,我做了一个通用的方法来处理九宫格在一个view中显示的情况。

这种情况我们只能通过定位每一个点的相对坐标来滑动,这里先获取整个九宫格所在view的位置,获取该view左上角的坐标,接下来我们需要得到两个点之间横向和纵向的距离,就能方便的计算出每个点的坐标了。
这里承接上一个版本的思路,提供了一个简化的方法:
/**
* 通过数字来标记滑动解锁
* @param by
* @param unlockKey
* @throws IOException
*/
protected static void patternLock(By by, String unlockKey) throws IOException {
WebElement element = findElement(by);
Dimension dimension = element.getSize();
// 获取手势密码控件坐标
Point point = element.getLocation();
HashMap<String, PointOption> lockMap = new HashMap<>();
// 对手势密码控件进行四等分
int h = dimension.width / 4;
// 获取手势密码控件y坐标
int y = point.y;
for (int i = 1; i <= 9; i++) {
if (i < 4) {
lockMap.put(String.valueOf(i), PointOption.point(h * i, y + h));
}
if (i > 3 && i < 7) {
lockMap.put(String.valueOf(i), PointOption.point(h * (i - 3), y + 2 * h));
}
if (i > 6) {
lockMap.put(String.valueOf(i), PointOption.point(h * (i - 6), y + 3 * h));
}
}
TouchAction action = new TouchAction(driver);
action.press(lockMap.get(String.valueOf(unlockKey.charAt(0)))).waitAction();
for (int i = 1; i<unlockKey.length() ; i++){
action.moveTo(lockMap.get(String.valueOf(unlockKey.charAt(i))));
}
action.release().perform();
}
这里,我将9个点,分别用1、2、3、4、5、6、7、8、9,这9个数字来代替,通过传递一个设置手势锁或者解锁的控件地址,这9个数字的组合来设置(或解锁)手势密码。
然后将发方法放到需要调用的地方就能够很方便的执行啦!