九宫格作为常见的手势密码,我们在使用的时候,是从起点开始,按住不放,然后滑动手指,直到最后一个点松开手指,如果与设置的手势密码匹配,则解锁成功。

现在大多数九宫格作为一个元素存在,很难定位到每一个点。

解决思路有两个,一是用指针定位每一个点;二是先获取元素坐标位置,再获取元素大小,然后切割图片,分别计算出每个点的坐标;

本次笔记记录第一个解决思路:

目的:创建一个Unlock类,按顺序传入九宫格的解锁数字即可实现主屏幕解锁

模拟器:夜神

1、坐标定位到每个点

A、夜神模拟器开发者选项中开启指针位置

B、找出九宫格每一个坐标的位置

# 位置坐标
position = [
[200, 800], [360, 800], [520, 800],
[200, 960], [360, 960], [520, 960],
[200, 1126], [360, 1126], [520, 1126]
]

2、创建类,实现解锁

class Unlock():
def __init__(self, passwd, passwd1=[]):
# 传入参数passwd,passwd1默认为空列表
self.passwd = passwd
self.passwd1 = passwd1 def passwd(self):
# 将传入的数字与position中的值对应,装入列表passwd1中
for i in self.passwd:
self.passwd1.append(position[i - 1])
return self.passwd1 def press(self):
# 按住第一个按钮
action.press(x=self.passwd1[0][0], y=self.passwd1[0][1]) def move(self):
# 滑动操作,循环方式控制次数
for j in range(1, len(self.passwd1)):
action.move_to(x=self.passwd1[j][0], y=self.passwd1[j][1]) def release(self):
# 释放
action.release() def perform(self):
# 提交
action.perform() def unlock(self):
self.passwd()
self.press()
self.move()
self.release()
self.perform()

注意:实例化类以列表方式传值

完整代码如下:

# coding=utf-8
'''
Author:lc
date:2019/4/24 20:53
'''
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from time import sleep
desired_capabilities = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
'unicodeKeyboard': 'true',
'resetKeyboard': 'true',
'appPackage': 'com.tencent.news',
'appActivity': 'com.tencent.news.activity.SplashActivity'
} driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_capabilities)
sleep(10)
# 滑动进入解锁页
driver.swipe(300, 900, 300, 300) action = TouchAction(driver)
position = [
[200, 800], [360, 800], [520, 800],
[200, 960], [360, 960], [520, 960],
[200, 1126], [360, 1126], [520, 1126]
] '''九宫格解锁'''
# 定义解锁类
class Unlock():
def __init__(self, passwd, passwd1=[]):
# 传入参数passwd,passwd1默认为空列表
self.passwd = passwd
self.passwd1 = passwd1 def passwd(self):
# 将传入的数字与position中的值对应,装入列表passwd1中
for i in self.passwd:
self.passwd1.append(position[i - 1])
return self.passwd1 def press(self):
# 按住第一个按钮
action.press(x=self.passwd1[0][0], y=self.passwd1[0][1]) def move(self):
# 滑动操作,循环方式控制次数
for j in range(1, len(self.passwd1)):
action.move_to(x=self.passwd1[j][0], y=self.passwd1[j][1]) def release(self):
# 释放
action.release() def perform(self):
# 提交
action.perform() def unlock(self):
self.passwd()
self.press()
self.move()
self.release()
self.perform()

App自动化(2)--Python&Appium实现安卓手机九宫格解锁的更多相关文章

  1. Python&Appium实现安卓手机图形解锁

    首先,在解锁状态下,建立一个Session,打开APP.然后,调用press_keycode()方法传入整型数值"26",锁定屏幕.通过implicitly_wait()方法等待两 ...

  2. Android app自动化测试之Python+Appium环境搭建

    1.安装JDK (1)JDK安装时会有两次,一次是jdk,第二次是jre. (2)环境变量配置: 添加JAVA_HOME变量, 值:Jdk的安装路径 添加CLASSPATH变量,值: .;%JAVA_ ...

  3. python+appium+yaml安卓UI自动化测试分享

    一.实现数据与代码分离,维护成本较低,先看看自动化结构,大体如下: testyaml管理用例,实现数据与代码分离,一个模块一个文件夹 public 存放公共文件,如读取配置文件.启动appium服务. ...

  4. 使用appium做安卓手机web自动化测试 真机demo

    一:appium相关环境搭建过程略. 二:连接真机: 1.手机(andriod 4.2.2)连接电脑,打开USB调试模式. 2.运行cmd 输入 adb devices -l 查看UDID,如图: 3 ...

  5. 使用appium后安卓手机无法调出键盘解决方法

    问题:用appium进行真机调试后,使用手机的app进行输入时无法调出键盘. 原因:appium调试时,将手机输入法设置成了Unicode IME 解决方法: 方法一,手机设置里修改输入法: 不同的手 ...

  6. 基于python+appium+yaml安卓UI自动化测试分享

    结构介绍 之前分享过一篇安卓UI测试,但是没有实现数据与代码分离,后期维护成本较高,所以最近抽空优化了一下.不想看文章得可以直接去Github,欢迎拍砖大致结构如下:   结构.png testyam ...

  7. 关于App自动化执行链接Appium服务包名正确但是报错An unknown server-side error occurred while processing the command

    在执行链接Appium服务时连接失败可能原因: 1.报错截图: 2.先检查包名是否正确(正常情况下包名不会错误)通过命令行查看包名:aapt dump badging xxx.apk 3.检查对应包的 ...

  8. Appium—python_ 安卓手机划屏幕操作

    开始的时候 不知道 python_unittest框架的命名规则,导致方法进不去,后来 改变方法名 能获取 # conding=utf- from appium import webdriver im ...

  9. 第十九章节 BJROBOT 安卓手机 APP 导航【ROS全开源阿克曼转向智能网联无人驾驶车】

    导航前说明:一定要确保你小车在构建好地图的基础上进行! 1.把小车平放在你想要构建地图区域的地板上,打开资料里的虚拟机,打开一个终端, ssh 过去主控端启动roslaunch znjrobot br ...

随机推荐

  1. Excel自动换行、Export2Excel 自动换行

    1需求:导出excel后自动换行显示. 2插件:Export2Excel 3.测试 listToExcel() { import('@/vendor/Export2Excel').then(excel ...

  2. MySQL InnoDB 存储引擎探秘

    在MySQL中InnoDB属于存储引擎层,并以插件的形式集成在数据库中.从MySQL5.5.8开始,InnoDB成为其默认的存储引擎.InnoDB存储引擎支持事务.其设计目标主要是面向OLTP的应用, ...

  3. Android设计模式总结

    1.复合模式:三层架构.MVC.MVP.MVVM 2.设计模式-单例模式 配置类的使用. 3.设计模式-模板方法 通过抽象类或接口提前定义要实现的方法. 4.设计模式-观察者模式 消息的通知. 5.设 ...

  4. Android视频录制从不入门到入门系列教程(二)————显示视频图像

    1.创建一个空的工程,注意声明下列权限: <uses-permission android:name="android.permission.CAMERA"/> < ...

  5. 无限极分类(adjacency list)的三种方式(迭代、递归、引用)

    一般的分类树状结构有两种方式: 一种是adjacency list,也就是是id,parent id这中形式. 另一种是nested set,即左右值的形式. 左右值形式查询起来比较高效,无需递归等, ...

  6. java笔记----获取电脑上ip(内网ip)

    private static String getHostIP(){ String tempIP = "127.0.0.1"; try { if(isIpv4(InetAddres ...

  7. C# 虚拟串口通信

    将主端口COM8拆分成 COM1和COM2两个虚拟端口 COM8接收的消息会传递给COM1和COM2 SerialPort spSend;//spSend,spReceive用虚拟串口连接,它们之间可 ...

  8. ASP.NET Zero--基础设施

    基础设施 启动类 ASP.NET Core从应用程序中的Startup类初始化.我们在这个类中配置所有库(包括ABP).我们建议您先检查此课程.它也被集成到 OWIN.所以,你可以在这里添加OWIN中 ...

  9. Windows Server 2008 R2 Enterprise x64 部署 nginx、tomcat、mysql

    部署nginx nginx主要做反向代理用,可以单独部署到其它机器上,这里nginx和tomcat部署在同一台机器上. 下载nginx-1.14.1.zip,并解压到目标目录,打开cmd进入到解压后的 ...

  10. 浅析C#中new、override、virtual关键字的区别

    Virtual : virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写. 默认情况下,方法是非虚拟的.不能重写非虚方法. virtual 修饰符不能与 stati ...