TouchAction

1.源码可以在这个路径找到:Lib\site-packages\appium\webdriver\common\touch_action.py

class TouchAction(object):def __init__(self, driver=None):self._driver = driverself._actions = []def tap(self, element=None, x=None, y=None, count=1):模拟手指触摸屏def press(self, el=None, x=None, y=None):短按:模拟手指按住一个元素,或者坐标def long_press(self, el=None, x=None, y=None, duration=1000):长按:模拟按住一个元素,或者坐标def wait(self, ms=0):按住元素后的等待时间def move_to(self, el=None, x=None, y=None):移动手指到另外一个元素,或者坐标,注意这里坐标不是绝对坐标,是偏移量def release(self):释放手指def perform(self):执行前面的动作

2.TouchAction里面有这几个动作:

  • 触摸 (tap)
  • 短按 (press)
  • 长按 (long_press)
  • 等待 (wait)
  • 移动到 (moveTo)
  • 释放 (release)
  • 执行 (perform)

九宫格解锁

1.有些九宫格的每个点可以直接定位到,这种相对来说容易一点,有一些九宫格就是一整个元素,比如QQ的九宫格解锁。

2.解决问题思路:先获取元素坐标位置,再获取元素大小,然后切割图片,分别计算出每个点的坐标

# 定位九宫格元素
jiu = 'resourceId("com.tencent.mobileqq:id/name").index(6)'
loc = driver.find_element_by_android_uiautomator(jiu).location
print("获取九宫格坐标位置:%s"%loc)s = driver.find_element_by_android_uiautomator(jiu).size
print("获取九宫格宽和高:%s"%s)

3.给每个圆圈编号从左到右1,2,3依次第二行4,5,6第三行7,8,9

gongge = {}
gongge[1] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6)
gongge[2] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6)
gongge[3] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6)
gongge[4] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6*3)
gongge[5] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6*3)
gongge[6] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6*3)
gongge[7] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6*5)
gongge[8] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6*5)
gongge[9] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6*5)
print gongge

偏移量

1.这里有个坑,press里面的参数是元素的坐标位置,但是move_to里面的是相对于前面一个元素的偏移位置。所以需要单独写一个函数,计算偏移量。

def pianyi(a=1,b=2):'''计算从a点到b点的偏移量'''g1 = gongge[a]g2 = gongge[b]r = (None, g2[1]-g1[1], g2[2]-g1[2])return r

2.另外press和move_to里面都有三个参数,第一个参数默认为None,所以我返回的参数里面第一个写None.

移动手指

1.解锁思路:先press按住第一个点,再wait等待,接着移动带第二个点,再wait,最后release释放手指,perform执行

2.比如我要画出一个Z形状,依次经过的点1,2,3,5,7,8,9

参考代码

# coding:utf-8
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from time import sleep
desired_caps = {'platformName': 'Android','deviceName': '127.0.0.1:62001','platformVersion': '4.4.2','appPackage': 'com.tencent.mobileqq','appActivity': 'com.tencent.mobileqq.activity.SplashActivity','noReset': "true"}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)sleep(5)jiu = 'resourceId("com.tencent.mobileqq:id/name").index(6)'
loc = driver.find_element_by_android_uiautomator(jiu).location
print("获取九宫格坐标位置:%s"%loc)
s = driver.find_element_by_android_uiautomator(jiu).size
print("获取九宫格宽和高:%s"%s)# 获取九个点的坐标
gongge = {}
gongge[1] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6)
gongge[2] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6)
gongge[3] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6)
gongge[4] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6*3)
gongge[5] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6*3)
gongge[6] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6*3)
gongge[7] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6*5)
gongge[8] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6*5)
gongge[9] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6*5)
print gonggedef pianyi(a=1,b=2):'''计算从a点到b点的偏移量'''g1 = gongge[a]g2 = gongge[b]r = (None, g2[1]-g1[1], g2[2]-g1[2])return r# 执行解锁
TouchAction(driver).press(*gongge[1]).wait(300).move_to(*pianyi(1,2)).wait(300).move_to(*pianyi(2,3)).wait(300).move_to(*pianyi(3,5)).wait(300).move_to(*pianyi(5,7)).wait(300).move_to(*pianyi(7,8)).wait(300).move_to(*pianyi(8,9)).wait(300).release().perform()

在学习过程中有遇到疑问的,可以appium+python QQ群交流:330467341

转载于:https://www.cnblogs.com/yoyoketang/p/7852161.html

appium+python自动化33-解锁九宫格(TouchAction)相关推荐

  1. Appium+python自动化8-Appium Python API

    Appium+python自动化8-Appium Python API 前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts contex ...

  2. Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP

    前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...

  3. Appium+python自动化-启动app

    Appium+python自动化-启动app 环境已经搭建好了,接下来就是需要启动APP,如何启动app呢?首先要获取包名,然后获取launcherActivity.获取这两个关键东西的方法很多,这里 ...

  4. appium+python自动化57-chromedriver与chrome版本

    前言 由于app的webview自动化是依赖于chromedriver的,并且每个app的webview版本号都不太一样,这就导致了,每次都需要重新去下载对应的chromedriver版本.如何根据当 ...

  5. Appium+python自动化(十)- 元素定位秘籍助你打通任督二脉 - 上卷(超详解

    简介 你有道灵光从天灵盖喷出来你知道吗,年纪轻轻就有一身横练的筋骨,简直百年一见的练武奇才啊,如果有一天让你打通任督二脉,那还不飞龙上天啊.正所谓我不入地狱谁入地狱,警恶惩奸维护世界和平这个任务就交个 ...

  6. Appium+python自动化(一)- 环境搭建—上(超详解)

    简介 最近整理了一下自动化的东西,先前整理的python接口自动化已经接近尾声.即将要开启新的征程和篇章(Appium&python).那么首相的问题就是搭建环境了.好久没搭建环境又踩了不少坑 ...

  7. appium+python自动化45-夜神模拟器连不上(adb server version (36) doesn't match this client (39); killing...)...

    前言 最新下了个最新版的夜神模拟器,然后adb devices发现连不上模拟器了,报adb server version (36) doesn't match this client (39); ki ...

  8. appium+python自动化40-adb offline(5037端口被占)

    前言 adb连手机的时候经常会出现offline的情况,一般杀掉adb,然后重启adb可以解决. 如果发现不管怎么重启adb都连不上,一直出现offlie的情况,这个时候很大可能就是adb的5037端 ...

  9. Appium+python自动化23-Android夜神模拟器操作app(2)

    前言 前面两篇环境已经搭建好了,接下来就是需要启动APP,如何启动app呢?首先要获取包名,然后获取launcherActivity.获取这两个关键东西的方法很多,这里就不一一多说,小伙伴们可以各显神 ...

最新文章

  1. 15-5重构_重构-糟糕,我一直在向后做。
  2. python模块之email: 电子邮件编码解码 (二、编码邮件)
  3. IIS初始化(预加载),解决第一次访问慢,程序池被回收问题
  4. Android中堆unlink利用学习
  5. 前端一HTML:二: html开发工具
  6. 2017北理c语言答案,c语言答案 北理工
  7. 【整体二分】区间第k小(金牌导航 整体二分-1)
  8. java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu
  9. [js] localStorage什么时候过期?
  10. JS字符转为json对象
  11. (篇三)C语言的冒泡排序多解、选择排序、数组合并、矩阵相加
  12. 关于 Android Service 的介绍都在这了
  13. 在线考试系统毕业设计设计过程及部分代码
  14. 沸点网络电视 v3.2 官方版
  15. 实验5 类的继承、派生和多态
  16. Master of Typing Tutor 1.2.3 特别版 Mac 打字练习软件掌握打字
  17. 佛系推荐《骡子》是经典又好看的动作电影毋庸置疑
  18. 以太坊ETH源码分析(1):地址生成过程
  19. Jira中的全流程开发管理
  20. 五年级下学期计算机课总结,信息技术期末教学总结

热门文章

  1. Egret之JSZip高级应用:压缩JS
  2. iOS系统 应用闪退或图标消失的解决办法
  3. 解决局域网IP冲突的问题
  4. 日志系统新贵 Loki,真香!!
  5. RocketMQ Consumer 负载均衡算法源码学习 -- AllocateMessageQueueConsistentHash
  6. Redis是如何写代码注释的?
  7. 阿里员工都是这样排查Java问题的,附工具单
  8. 又是一个程序员粗心的代码引起频繁FullGC的案例
  9. 初窥Go module
  10. 数据中心的PUE 最低可至1.15,浸没式液冷技术是关键