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

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

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

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

目的:创建一个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. 变量类型、构造器、封装以及 LeetCode 每日一题

    1.成员变量和局部变量 1.1成员变量和局部变量定义 成员变量指的是类里面定义的变量(field),局部变量指的是在方法里定义的变量. 成员变量无须显示初始化,系统会自动在准备阶段或创建该类的实例时进 ...

  2. windows系统 docker + swoole 操作

    之前文章讲过在windows系统安装 cgywin 从而安装swoole扩展的操作,但是安装cgywin的时候会出现这样那样的问题.所以今天记录下另一种方式使用docker 安装 swoole 环境! ...

  3. html meta标签使用及属性介绍

    自学前端开始,我对meta标签接触不多,主要把精力都集中在能显示出来的标签上,比如span.button.h1等等.有时候去查看一些知名网站的源码,发现head标签里有一大摞的meta. 今天就来学习 ...

  4. Snapde电子表格编写Exprtk脚本进行数据运算

    Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件:它运行的速度非常快,反应非常灵敏. 一.打开文件:用Snapde打开需要运算的CSV文件 二.添加行列:在编辑菜单找到设置 ...

  5. Redis中5种数据结构的使用场景

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  6. Python 进程(一)理论部分

    进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行,即正在运行的程序,是系统进行资源分配和调度的基本单位,进程是对正在运行程序的一个抽象,在早期面向进程设计的计算机结构中,进程是程 ...

  7. js 学习之路9:运算符

    1. 算数运算符 运算符 描述 例子 结果 + 加 x=y+2 x=7 - 减 x=y-2 x=3 * 乘 x=y*2 x=10 / 除 x=y/2 x=2.5 % 求余数 (保留整数) x=y%2 ...

  8. Jenkins 使用Tfs 插件出现 MappingConflictException 错误问题解决

    FATAL: com.microsoft.tfs.core.clients.versioncontrol.exceptions.MappingConflictException: The path C ...

  9. web安全—sql注入漏洞

    SQL注入-mysql注入 一.普通的mysql注入 MySQL注入不像注入access数据库那样,不需要猜.从mysql5.0以上的版本,出现一个虚拟的数据库,即:information_schem ...

  10. StringUtils工具类常用方法详解

    StringUtils 常用方法 1.isEmpty(String str) 是否为空,空格字符为false2.isNotEmpty(String str) 是否为非空,空格字符为true3.isBl ...