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

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

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

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

目的:创建一个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. 学习day03

    1.结构标记  *****   做布局    1.<header>元素    <header></header>    ==> <div id=&quo ...

  2. Python网络爬虫-信息标记

    信息标记的三种形式: XML(扩展标记语言) JSON(js中面向对象的信息表达形式,由类型的(string)键值对组成) "name":"北京理工大学" YA ...

  3. Flask技术问题汇总

    1:Flask 使用 request对象代理了当前请求的上下文.这么做什么好处和坏处? 好处:flask封装了C端发起request对象,这样就可以使用上下文临时把某些对象变为全局可访问:如果不封装, ...

  4. Android Fragment碎片

    什么是碎片? 碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛.可以把Fragment当成Activity一个界面的一 ...

  5. IOS以无线方式安装企业内部应用(开发者)

    请先阅读:http://help.apple.com/deployment/ios/#/apda0e3426d7 操作系统:osx yosemite 10.10.5 (14F1509) xcode:V ...

  6. bash: lspci: command not found解决方法

    在CentOS虚拟机使得lspci查看硬件信息.使用时,提示bash: lspci: command not found,大多使用/sbin/lspci即可,我发现我的系统中/sbin下也没有.使用y ...

  7. react-router(v4)

    概要 开发单页应用, 首先绕不开的内容就是路由, react router v4 版本是最新的版本. 和之前的版本相比, 成熟了很多, 也简单了很多, 使用起来更加方便. 核心 component r ...

  8. 每日PA -2019年1月帖-每天更新

    开篇 "每日PA"有什么亮点?

  9. 使用jquery模拟请求,测试项目是否存在跨域限制

    1.Get 请求 <html> <head><script src="https://cdn.staticfile.org/jquery/1.10.2/jque ...

  10. 一个 C# 文件权限的帮助类

    直接贴代码了: FilePermissionHelper.cs using System.Collections.Generic; using System.IO; using System.Secu ...