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 ...
随机推荐
- Java开发笔记(八十八)文件字节I/O流
前面介绍了如何使用字符流读写文件,并指出字符流工具的处理局限,进而给出随机文件工具加以改进.随机文件工具除了支持访问文件内部的任意位置,更关键的一点是通过字节数组读写文件数据,采取字节方式比起字符方式 ...
- 调用链监控 CAT 之 入门
简介 CAT 是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海所有核心应用.目前在中间件(MVC.RPC.数据库.缓存等)框架中得到广泛应用,为美团各业务线提供系统的性 ...
- Java UrlRewriter伪静态技术运用深入分析
通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面,都将文章内容生成静态页面. 但是有时为了能实时的显示一些信息,或者还想运用动态脚本解决一些问题,不能用静态的方式来展示网站内容,必须用到动态页 ...
- Java学习点滴——初识Java
基于<Java编程思想>第四版 前言 "程序就是算法加数据结构",而算法就是控制语句加操作符,编写一个程序就是使用控制语句加操作符去操作数据结构,因此我从Java的控制 ...
- js高德地图手机定位
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- su和sudo的区别
首先来说一下su 然后是sudo
- jQuery链式编程
链式编程 多行代码合并成一行代码,前提要认清此行代码返回的是不是对象.是对象才能进行链式编程 .html(‘val’).text(‘val’).css()链式编程,隐式迭代 链式编程注意:$(‘div ...
- Android Studio打包SDK后,为什么没有bundles文件夹?
在Android Studio中,将项目打包成jar包,按照网上说的方法打包完成后,在intermediates文件夹下没有bundles,AS版本3.1.2,后来发现,原来是intermediate ...
- 好代码是管出来的——使用GitHub实现简单的CI/CD
软件开发一般来说是一项团队作业,在本系列文章开始就提到过软件的编码是由一个团队“并行”完成的,为了保证编码任务正常完成,首先引入版本控制工具来完成代码管理,为了保证代码质量引入了代码分析器以及代码测试 ...
- 下载华为交换机MIB参考文件并使用snmpwalk获取OID信息
1.下载交换机MIB参考文件访问 https://support.huawei.com/enterprise/zh/index.html,搜索交换机型号 点击案例库,选择MIB参考 下载文件 打开文件 ...