App自动化(2)--Python&Appium实现安卓手机九宫格解锁
九宫格作为常见的手势密码,我们在使用的时候,是从起点开始,按住不放,然后滑动手指,直到最后一个点松开手指,如果与设置的手势密码匹配,则解锁成功。
现在大多数九宫格作为一个元素存在,很难定位到每一个点。
解决思路有两个,一是用指针定位每一个点;二是先获取元素坐标位置,再获取元素大小,然后切割图片,分别计算出每个点的坐标;
本次笔记记录第一个解决思路:
目的:创建一个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实现安卓手机九宫格解锁的更多相关文章
- Python&Appium实现安卓手机图形解锁
首先,在解锁状态下,建立一个Session,打开APP.然后,调用press_keycode()方法传入整型数值"26",锁定屏幕.通过implicitly_wait()方法等待两 ...
- Android app自动化测试之Python+Appium环境搭建
1.安装JDK (1)JDK安装时会有两次,一次是jdk,第二次是jre. (2)环境变量配置: 添加JAVA_HOME变量, 值:Jdk的安装路径 添加CLASSPATH变量,值: .;%JAVA_ ...
- python+appium+yaml安卓UI自动化测试分享
一.实现数据与代码分离,维护成本较低,先看看自动化结构,大体如下: testyaml管理用例,实现数据与代码分离,一个模块一个文件夹 public 存放公共文件,如读取配置文件.启动appium服务. ...
- 使用appium做安卓手机web自动化测试 真机demo
一:appium相关环境搭建过程略. 二:连接真机: 1.手机(andriod 4.2.2)连接电脑,打开USB调试模式. 2.运行cmd 输入 adb devices -l 查看UDID,如图: 3 ...
- 使用appium后安卓手机无法调出键盘解决方法
问题:用appium进行真机调试后,使用手机的app进行输入时无法调出键盘. 原因:appium调试时,将手机输入法设置成了Unicode IME 解决方法: 方法一,手机设置里修改输入法: 不同的手 ...
- 基于python+appium+yaml安卓UI自动化测试分享
结构介绍 之前分享过一篇安卓UI测试,但是没有实现数据与代码分离,后期维护成本较高,所以最近抽空优化了一下.不想看文章得可以直接去Github,欢迎拍砖大致结构如下: 结构.png testyam ...
- 关于App自动化执行链接Appium服务包名正确但是报错An unknown server-side error occurred while processing the command
在执行链接Appium服务时连接失败可能原因: 1.报错截图: 2.先检查包名是否正确(正常情况下包名不会错误)通过命令行查看包名:aapt dump badging xxx.apk 3.检查对应包的 ...
- Appium—python_ 安卓手机划屏幕操作
开始的时候 不知道 python_unittest框架的命名规则,导致方法进不去,后来 改变方法名 能获取 # conding=utf- from appium import webdriver im ...
- 第十九章节 BJROBOT 安卓手机 APP 导航【ROS全开源阿克曼转向智能网联无人驾驶车】
导航前说明:一定要确保你小车在构建好地图的基础上进行! 1.把小车平放在你想要构建地图区域的地板上,打开资料里的虚拟机,打开一个终端, ssh 过去主控端启动roslaunch znjrobot br ...
随机推荐
- js实现复制文本内容到剪切板
function copyUrl() { var Url2=document.getElementById("url").innerText; var oInput = docum ...
- 用mapreduce 处理气象数据集
用mapreduce 处理气象数据集 编写程序求每日最高最低气温,区间最高最低气温 气象数据集下载地址为:ftp://ftp.ncdc.noaa.gov/pub/data/noaa 按学号后三位下载不 ...
- Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示
关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了S ...
- arcgis api 4.x for js之基础地图篇
arcgis api3.x for js转向arcgis api4.x,我也是最近的3-4个月时间的事情,刚好公司有个webgis项目需要展示三维场景,项目选择arcgis api4.x.我纯碎记录一 ...
- iOS----------Bad Gateway
今天项目因为元数据被拒,再次提交去编辑APP时,发现进不了我的APP界面,出现了如下情况,大概有10多分钟 ,一直进不去 ,公司网络一直不稳定,于是打开了我的VPN,然后就可以了.
- 用存储过程向数据库添加大量数据【mysql】
预分配ID的设计,需要先为数据库生成大量的数据.比如对用户ID有要求的系统,那么用户ID就要预先生成. 通过python,php,c/c++/c#,js等程序生成也是可以,但需要这些程序环境,而且单条 ...
- 快速排序实现及其pivot的选取
coursera上斯坦福的算法专项在讲到快速排序时,称其为最优雅的算法之一.快速排序确实是一种比较有效的排序算法,很多类库中也都采用了这种排序算法,其最坏时间复杂度为$O(n^2)$,平均时间复杂度为 ...
- Java关于日期的计算持续汇总~
/** * 00 * 描述:传入Date date.转为 String yyyyMMdd. * [时间 2019-04-18 15:41:12 作者 陶攀峰] */ public static Str ...
- 自托管websocket和webapi部署云服务器域名及远程访问
当写完websocket和webapi服务端时,在本地测试时是没有问题的,因为是通过本地IP及端口号访问(例:127.0.0.1:8080\api\test),也就没有防火墙等安全限制,但当部署到云服 ...
- 网络基础 外网IP,内网IP,虚拟机的网络设置
外网IP,内网IP的关系 在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请注册.但是在IPv4地址协议中预留了3个IP地址段,作为私有地址,供组织机构内部使用. 这三个地址 ...