首先 先封装下每个解锁方式

package com.秘密xxx.autotest.page.systemui;import android.graphics.Point;
import android.graphics.Rect;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.BySelector;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.UiObjectNotFoundException;
import android.support.test.uiautomator.Until;import com.transsion.autotest.common.PackageConstants;
import com.transsion.autotest.page.BasePage;public class SystemUiPage extends BasePage {private final long LAUNCH_CALL_PAGE = 5000L;private BySelector lockIconSelector = By.res(PackageConstants.SystemUI.PACKAGE, "lock_icon");private BySelector unLockPinEnterSelector = By.res("com.android.systemui:id/key_enter").desc("Enter");private BySelector unlockPasswordEnterSelector = By.res("com.android.systemui:id/passwordEntry").desc("Device password");public BySelector homeButtonSelector = By.res("com.android.systemui:id/home").desc("Home");private BySelector backButtonSelector = By.res("com.android.systemui:id/back").desc("Back");private BySelector recentButtonSelector = By.res("com.android.systemui:id/recent_apps").desc("Overview");private BySelector launcherObjectSelector = By.pkg("com.android.launcher3").clazz("android.view.ViewGroup");public SystemUiPage(UiDevice device) {super(device);}/*** 屏幕解锁页面,上划解锁*/public void screenUnLockSwipeUp() {Point p = find(lockIconSelector).getVisibleCenter();mDevice.swipe(p.x, p.y, p.x, 0, 5);mDevice.wait(Until.gone(lockIconSelector), LAUNCH_CALL_PAGE);}/*** 获取传入键的中心坐标*/public Point getCenterCoordinateOfTheKey(BySelector button) {UiObject2 uiObject = find(button);Rect stRect = uiObject.getVisibleBounds();int nPressX = stRect.centerX();int nPressY = stRect.centerY();return new Point(nPressX, nPressY);}/*** 从Key键上划*/public void swipeUpFromKey(Point keyButton) {Point[] pointIntoArray = new Point[]{new Point(keyButton.x, keyButton.y + 0),new Point(keyButton.x, keyButton.y - 150),};mDevice.swipe(pointIntoArray, 40);}/*** 屏幕解锁页面,倒L图案解锁*/public void screenUnLockPattern() {screenUnLockSwipeUp();Point[] pointUnlockArray = new Point[]{new Point(175, 784), new Point(357, 784), new Point(531, 784), new Point(531, 969), new Point(531, 1144)};int step = 50;mDevice.swipe(pointUnlockArray, step);}/*** 屏幕解锁页面,Pin 1234解锁*/public void screenUnLockPin() {screenUnLockSwipeUp();String[] passWord = {"1", "2", "3", "4"};for (String i : passWord) {find(By.res("com.android.systemui:id/digit_text").clazz("android.widget.TextView").text(i)).click();}find(unLockPinEnterSelector).clickAndWait(Until.newWindow(), 3000);}/*** 屏幕解锁页面,Password 1111解锁*/public void screenUnLockPassword() {screenUnLockSwipeUp();find(unlockPasswordEnterSelector).setText("1111");mDevice.pressEnter();}public SystemUiPage longClickBackButton() throws UiObjectNotFoundException {Point backCenterPoint = getCenterCoordinateOfTheKey(backButtonSelector);Point[] pointIntoArray = new Point[]{backCenterPoint, backCenterPoint};int nSecondsSteps = 200;mDevice.swipe(pointIntoArray, nSecondsSteps);return new SystemUiPage(mDevice);}public boolean isKeyExists() {boolean isHomeButtonExists = mDevice.hasObject(homeButtonSelector);boolean isBackButtonExists = mDevice.hasObject(backButtonSelector);boolean isRecentButtonExists = mDevice.hasObject(recentButtonSelector);return isHomeButtonExists && isBackButtonExists && isRecentButtonExists;}public void mostLeftSwipeToRight() {mDevice.swipe(0, mDevice.getDisplayHeight() / 2,mDevice.getDisplayWidth(), mDevice.getDisplayHeight() / 2, 100);}public boolean isOnTheDesktop() {return mDevice.hasObject(launcherObjectSelector);}}

解锁的Page

package com.xxxxxx.autotest.page.settings;import android.graphics.Point;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.BySelector;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObjectNotFoundException;
import android.support.test.uiautomator.Until;import com.xxxxxx.autotest.page.BasePage;public class SecurityLocationPage extends BasePage {SettingsMainPage mSettingsMainPage = new SettingsMainPage(mDevice);private final long LAUNCH_CALL_PAGE = 5000L;private final String mScreenLock = "Screen lock";private BySelector screenLockButtonSelector = By.text("Screen lock");private BySelector locationButtonSelector = By.text("Location");private BySelector noneScreenLockSelector = By.text("None").res("android:id/title");private BySelector swipeScreenLockSelector = By.text("Swipe").res("android:id/title");private BySelector patternScreenLockSelector = By.text("Pattern").res("android:id/title");private BySelector pinScreenLockSelector = By.text("PIN").res("android:id/title");private BySelector passwordScreenLockSelector = By.text("Password").res("android:id/title");private BySelector ChooseScreenLockSelector = By.text("Choose screen lock");private BySelector SecureStartUpSelector = By.text("Secure start-up").res("com.android.settings:id/suw_layout_title");private BySelector SecureStartUpNoButtonSelector = By.text("NO").res("com.android.settings:id/encrypt_dont_require_password");private BySelector locationSwitchButtonSelector = By.res("com.android.settings:id/switch_widget").clazz("android.widget.Switch");private BySelector securityLocationHeadlineSelector = By.text("Security & location");private BySelector setScreenLockNextSelector = By.text("NEXT");private BySelector setScreenLockConfirmSelector = By.text("CONFIRM");private BySelector setScreenLockDoneSelector = By.text("DONE");private BySelector setScreenQuestionSkipSelector = By.text("Skip");private BySelector confirmYourPatternSelector = By.text("Confirm your pattern");private BySelector setScreenLockPasswordSelector = By.res("com.android.settings:id/password_entry").clazz("android.widget.EditText");private BySelector reEnterYourPinSelector = By.text("Re-enter your PIN");private BySelector reEnterYourPasswordSelector = By.text("Re-enter your password");private BySelector removeDeviceProtectionSelector = By.text("Remove device protection?").res("android:id/alertTitle");private BySelector yesRemoveButtonSelector = By.text("YES, REMOVE").res("android:id/button1");private BySelector getScreenLockButtonSelector = By.text("Screen lock");private BySelector quitSecurityLocationButtonSelector = By.text("Use Accessibility Shortcut?");private BySelector settingsSearchTextSelector = By.res("com.android.settings:id/search_action_bar_title").text("Search settings");public SecurityLocationPage(UiDevice device) {super(device);}/*** 判断是否在Security&location页面*/public boolean isSecurityLocationPage() {return mDevice.hasObject(securityLocationHeadlineSelector);}/*** 从 Security&location页面进入choose screen lock页面,选择None锁屏方式*/public void selectScreenLockNone() throws UiObjectNotFoundException {mSettingsMainPage.settingsListItem(mScreenLock);mDevice.wait(Until.hasObject(ChooseScreenLockSelector), LAUNCH_CALL_PAGE);find(noneScreenLockSelector).click();mDevice.wait(Until.hasObject(screenLockButtonSelector), LAUNCH_CALL_PAGE);}/*** 从 Security&location页面进入choose screen lock页面,选择Swipe锁屏方式*/public void selectScreenLockSwipe() throws UiObjectNotFoundException {mSettingsMainPage.settingsListItem(mScreenLock);//  Password密码为1111if (mDevice.hasObject(reEnterYourPasswordSelector)) {find(setScreenLockPasswordSelector).setText("1111");mDevice.pressEnter();}mDevice.wait(Until.hasObject(ChooseScreenLockSelector), LAUNCH_CALL_PAGE);find(swipeScreenLockSelector).click();if (mDevice.hasObject(removeDeviceProtectionSelector)) {find(yesRemoveButtonSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);}mDevice.wait(Until.hasObject(screenLockButtonSelector), LAUNCH_CALL_PAGE);}/*** 从 Security&location页面进入choose screen lock页面,选择Pattern锁屏方式,图案为倒L*/public void selectScreenLockPattern() throws UiObjectNotFoundException {mSettingsMainPage.settingsListItem(mScreenLock);mDevice.wait(Until.hasObject(ChooseScreenLockSelector), LAUNCH_CALL_PAGE);find(patternScreenLockSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);if (mDevice.hasObject(SecureStartUpSelector)) {find(SecureStartUpNoButtonSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);}Point[] pointLockArray = new Point[]{new Point(175, 645), new Point(357, 645), new Point(531, 645), new Point(531, 825), new Point(531, 1006)};int step = 50;mDevice.swipe(pointLockArray, step);find(setScreenLockNextSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);mDevice.swipe(pointLockArray, step);find(setScreenLockConfirmSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);find(setScreenLockDoneSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);find(setScreenQuestionSkipSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);mDevice.wait(Until.hasObject(screenLockButtonSelector), LAUNCH_CALL_PAGE);}/*** 从 Security&location页面进入choose screen lock页面,选择PIN锁屏方式*/public void selectScreenLockPin() throws UiObjectNotFoundException {mSettingsMainPage.settingsListItem(mScreenLock);//  Pattern为倒L图案if (mDevice.hasObject(confirmYourPatternSelector)) {Point[] pointIntoArray = new Point[]{new Point(175, 633), new Point(357, 633), new Point(531, 633), new Point(531, 819), new Point(531, 1000)};mDevice.swipe(pointIntoArray, 50);}find(pinScreenLockSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);//排除 Secure start-upif (mDevice.hasObject(SecureStartUpSelector)) {find(SecureStartUpNoButtonSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);}find(setScreenLockPasswordSelector).setText("1234");find(setScreenLockNextSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);find(setScreenLockPasswordSelector).setText("1234");find(setScreenLockConfirmSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);mDevice.wait(Until.hasObject(screenLockButtonSelector), LAUNCH_CALL_PAGE);}/*** 从 Security&location页面进入choose screen lock页面,选择Password锁屏方式*/public void selectScreenLockPassword() throws UiObjectNotFoundException {mSettingsMainPage.settingsListItem(mScreenLock);//  pin密码为1234if (mDevice.hasObject(reEnterYourPinSelector)) {find(setScreenLockPasswordSelector).setText("1234");mDevice.pressEnter();}find(passwordScreenLockSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);//排除 Secure start-upif (mDevice.hasObject(SecureStartUpSelector)) {find(SecureStartUpNoButtonSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);}find(setScreenLockPasswordSelector).setText("1111");find(setScreenLockNextSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);find(setScreenLockPasswordSelector).setText("1111");find(setScreenLockConfirmSelector).clickAndWait(Until.newWindow(), LAUNCH_CALL_PAGE);mDevice.wait(Until.hasObject(screenLockButtonSelector), LAUNCH_CALL_PAGE);}public boolean enterChooseScreenLockPage() {find(getScreenLockButtonSelector).click();return mDevice.wait(Until.gone(getScreenLockButtonSelector), LAUNCH_CALL_PAGE);}public boolean quitSecurityLocation() {if (mDevice.hasObject(quitSecurityLocationButtonSelector)) {find(quitSecurityLocationButtonSelector).click();return mDevice.wait(Until.hasObject(settingsSearchTextSelector), LAUNCH_CALL_PAGE);} else {return false;}}public boolean backSecurityLocation() {mDevice.pressBack();return mDevice.wait(Until.hasObject(settingsSearchTextSelector), LAUNCH_CALL_PAGE);}
}

最后就是各种解锁的实现啦

@Test
public void testSettings_0175_checkUnlockWays() throws UiObjectNotFoundException, RemoteException {// 常进入【选择屏幕锁定方式】界面,解锁方式包括:无/滑动/图案/PIN码/密码mSettingsPage.enterSecurityLocationList();SecurityLocationPage mSecurityLocationPage = new SecurityLocationPage(mDevice);mSecurityLocationPage.enterChooseScreenLockPage();ChooseScreenLockPage mChooseScreenLockPage = new ChooseScreenLockPage(mDevice);boolean isExistsFiveScreenLock = mChooseScreenLockPage.isExistsScreenLockWays();Assert.assertTrue("some lock ways lose", isExistsFiveScreenLock);
}@Test
public void testSettings_0176_setNoneScreenLock() throws UiObjectNotFoundException, RemoteException {//None解锁功能mSettingsPage.enterSecurityLocationList();SecurityLocationPage mSecurityLocationPage = new SecurityLocationPage(mDevice);mSecurityLocationPage.selectScreenLockNone();mDevice.sleep();mHelper.wakeUp();Assert.assertTrue("Lock screen set to None may not be implemented",mSecurityLocationPage.isSecurityLocationPage());
}@Test
public void testSettings_0177_setSwipeScreenLock() throws UiObjectNotFoundException, RemoteException {// Swipe解锁功能mSettingsPage.enterSecurityLocationList();SecurityLocationPage mSecurityLocationPage = new SecurityLocationPage(mDevice);mSecurityLocationPage.selectScreenLockSwipe();mDevice.sleep();mHelper.unlock();Assert.assertTrue("Lock screen set to Swipe may not be implemented",mSecurityLocationPage.isSecurityLocationPage());
}@Test
public void testSettings_0178_setPatternScreenLock() throws UiObjectNotFoundException, RemoteException {// pattern解锁功能mSettingsPage.enterSecurityLocationList();SecurityLocationPage mSecurityLocationPage = new SecurityLocationPage(mDevice);mSecurityLocationPage.selectScreenLockPattern();mDevice.sleep();mDevice.wakeUp();SystemUiPage mSystemUiPage = new SystemUiPage(mDevice);mSystemUiPage.screenUnLockPattern();Assert.assertTrue("Lock screen set to Pattern may not be implemented",mSecurityLocationPage.isSecurityLocationPage());
}@Test
public void testSettings_0179_setPinScreenLock() throws UiObjectNotFoundException, RemoteException {// pin解锁功能mSettingsPage.enterSecurityLocationList();SecurityLocationPage mSecurityLocationPage = new SecurityLocationPage(mDevice);mSecurityLocationPage.selectScreenLockPin();mDevice.sleep();mDevice.wakeUp();SystemUiPage mSystemUiPage = new SystemUiPage(mDevice);mSystemUiPage.screenUnLockPin();Assert.assertTrue("Lock screen set to Pin may not be implemented",mSecurityLocationPage.isSecurityLocationPage());
}@Test
public void testSettings_0180_setPasswordScreenLock() throws UiObjectNotFoundException, RemoteException {// password解锁功能mSettingsPage.enterSecurityLocationList();SecurityLocationPage mSecurityLocationPage = new SecurityLocationPage(mDevice);mSecurityLocationPage.selectScreenLockPassword();mDevice.sleep();mDevice.wakeUp();SystemUiPage mSystemUiPage = new SystemUiPage(mDevice);mSystemUiPage.screenUnLockPassword();Assert.assertTrue("Lock screen set to Password may not be implemented",mSecurityLocationPage.isSecurityLocationPage());
}

因为我们采用的事POM的写法,后续会拆分下,写的详细一点。

Java+Uiautomator自动化测试 -- 3.实现手机的五种解锁方式(无/滑动/图案/PIN码/密码|)相关推荐

  1. 关于线程池的五种实现方式,中软国际Java机试

    在这里,还有创建一个只有单个线程的可以定时执行线程池(Executors.newSingleThreadScheduledExecutor())这些都是上面的线程池扩展开来了,不详细介绍了. 3 介绍 ...

  2. Java并发编程一线程池的五种状态

    推荐:Java并发编程汇总 Java并发编程一线程池的五种状态 原文地址 Java多线程线程池(4)–线程池的五种状态 正文 线程池的5种状态:Running.ShutDown.Stop.Tidyin ...

  3. Java 单例模式常见五种实现方式

    定义 单例模式,属于创建类型的一种常用的软件设计模式. 单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点. ...

  4. Java防止Xss注入json_XSS的两种攻击方式及五种防御方式

    XSS介绍 跨站脚本攻击指的是自己的网站运行了别的网站里面的代码 攻击原理是原本需要接受数据但是一段脚本放置在了数据中: 该攻击方式能做什么? 获取页面数据 获取Cookies 劫持前端逻辑 发送请求 ...

  5. 后端技术:Java定时任务的五种创建方式

    Quartz表达式生成地址:http://cron.qqe2.com/ 支持生成定时任务表达式和反解析,使用Quartz表达式的定时任务如下 xxl-job springboot 的 @Schedul ...

  6. Jdbc连接mysql的五种连接方式

    一:五种连接方式 直接上码 package com.wyjedu.jdbc;import com.mysql.jdbc.Driver;import java.io.FileInputStream; i ...

  7. 智能家居主流的五种连接方式

    内容截取自B站UP主 小戴tv 视频链接:https://www.bilibili.com/video/BV17v411Y7TP/?spm_id_from=333.788.recommend_more ...

  8. Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解

    源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...

  9. JavaScript中this的五种绑定方式详解

    1 this的五种绑定方式 1.1 默认绑定 默认绑定是指当函数调用时,没有为其指定对象上下文,此时会将该函数的this绑定到全局对象(window对象).自ES5有了严格模式之后,默认绑定方式又分为 ...

最新文章

  1. LinkExtractor
  2. 宝塔服务器搞成虚拟主机,宝塔面板怎么配置虚拟主机
  3. java content()_Java contentEquals() 方法 - Break易站
  4. PAT甲级 -- 1050 String Subtraction (20 分)
  5. Ecilpse常用快捷键
  6. JQuery 之 跳出循环
  7. 计算机的80端口被占用 - 思路篇
  8. 2017.9.10 连续攻击游戏 思考记录
  9. bootstrapValidator验证失败问题
  10. POJ 2828 Buy Tickets(单点更新) 详细题解和思路
  11. spring 多租户数据源实现事务一致性
  12. IDM下载器插件 让浏览器不在限速
  13. 园林景观cad_景观广场及绿化设计(附CAD平面图)
  14. zabbix_proxy代理服务器搭建教程
  15. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总
  16. B-Spline曲线的导数
  17. PHP - AES 加密解密
  18. APP开发流程实例讲解-儒释道网络电台八天开发全程-百度云深度兼容测试并进一步优化排错
  19. 简历之STAR法则(转)
  20. java重新定义_重新定义Spring Cloud实战 PDF 下载

热门文章

  1. 互联网时代:天才与伟人的区别
  2. 0x80070002(0x80070002错误代码怎么解决)
  3. 如何在CMD命令行下批量ping多个ip并且将结果输出
  4. PHP与MySQL外文文献译文和原文_计算机外文翻译---基于PHP和MYSQL的网站设计和实现...
  5. 状态空间方程转换传递函数
  6. @kubernetes(k8s) 应用配置管理(ConfigMap、subPath、Secret)
  7. 微信双开还是微信定时炸弹?- 关于非越狱iOS上微信分身高危插件ImgNaix的分析...
  8. Apache Kafka 3.0 版本发布
  9. Camunda流程引擎 Modeler (二)
  10. Spring所有注解大揭秘