TouchAction

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

  1. class TouchAction(object):
  2. def __init__(self, driver=None):
  3. self._driver = driver
  4. self._actions = []
  5. def tap(self, positions, duration=None):
  6. 模拟手指点击,可设置按住时间长度(毫秒)    用法 driver.tap([(x,y),(x1,y1)],500)
  7. def press(self, el=None, x=None, y=None):
  8. 短按:模拟手指按住一个元素,或者坐标
  9. def long_press(self, el=None, x=None, y=None, duration=1000):
  10. 长按:模拟按住一个元素,或者坐标
  11. def wait(self, ms=0):
  12. 按住元素后的等待时间
  13. def move_to(self, el=None, x=None, y=None):
  14. 移动手指到另外一个元素,或者坐标,appium-desk1.6之后改用的是绝对坐标!!!
  15. def release(self):
  16. 释放手指
  17. def perform(self):
  18. 执行前面的动作

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

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

九宫格解锁

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

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

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

3.给每个圆圈编号从左到右1,2,3依次第二行4,5,6第三行7,8,9。press和move_to里面都有三个参数,第一个参数默认为None,所以我返回的参数里面第一个写None.

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

移动手指

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

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

参考代码

  1. # coding:utf-8
  2. from appium import webdriver
  3. from appium.webdriver.common.touch_action import TouchAction
  4. from time import sleep
  5. desired_caps = {
  6. 'platformName': 'Android',
  7. 'deviceName': '127.0.0.1:62001',
  8. 'platformVersion': '4.4.2',
  9. 'appPackage': 'com.tencent.mobileqq',
  10. 'appActivity': 'com.tencent.mobileqq.activity.SplashActivity',
  11. 'noReset': "true"
  12. }
  13. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
  14. sleep(5)
  15. jiu = 'resourceId("com.tencent.mobileqq:id/name").index(6)'
  16. loc = driver.find_element_by_android_uiautomator(jiu).location
  17. print("获取九宫格坐标位置:%s"%loc)
  18. s = driver.find_element_by_android_uiautomator(jiu).size
  19. print("获取九宫格宽和高:%s"%s)
  20. # 获取九个点的坐标
  21. gongge = {}
  22. gongge[1] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6)
  23. gongge[2] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6)
  24. gongge[3] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6)
  25. gongge[4] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6*3)
  26. gongge[5] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6*3)
  27. gongge[6] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6*3)
  28. gongge[7] = (None, loc["x"]+s["width"]/6, loc["y"]+s["height"]/6*5)
  29. gongge[8] = (None, loc["x"]+s["width"]/6*3, loc["y"]+s["height"]/6*5)
  30. gongge[9] = (None, loc["x"]+s["width"]/6*5, loc["y"]+s["height"]/6*5)
  31. print gongge
  32. # 执行解锁
  33. TouchAction(driver).press(*gongge[1]).wait(300).move_to(*gongge[2]).wait(300).move_to(*gongge[3]).wait(300).
  1.   move_to(*gongge[5]).wait(300).move_to(*gongge[7]).wait(300).move_to(*gongge[9]).wait(300).release().perform()

Appium解锁九宫格(TouchAction)的更多相关文章

  1. appium 解锁九宫格

    很多人在自动化的过程中,对解锁9宫格有很多麻烦,特别是app上的有些整个放在整个view中,这就给我们测试解锁九宫格带来问题了,笔者尝试了去解决,但是都没有找到一个很好的方案,那么我就试着先去通过安卓 ...

  2. Python+Appium自动化测试(10)-TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)

    滑动屏幕方法swipe一般用于对页面进行上下左右滑动操作,但自动化过程中还会遇到其他情况,如对控件元素进行滑动.拖拽操作,九宫格解锁,手势操作,地图的放大与缩小等.这些需要针对控件元素的滑动操作,或者 ...

  3. python+Appium自动化:TouchAction九宫格实战

    TouchAction Touch Action包含一系列操作,比如按压.长按.点击.移动.暂停. 使用TochAction需要先导入对应的模块 from appium.webdriver.commo ...

  4. 新版appium绘制九宫格的一个注意点

    在用appium-desktop-setup-1.6.2进行app手势密码设置时,发现move_to(x, y)相对偏移量的方法用不了,绘制的手势也是乱跑 还会抛一个错误 selenium.commo ...

  5. iOS-高仿支付宝手势解锁(九宫格)

    概述 高仿支付宝手势解锁, 通过手势枚举去实现手势密码相对应操作. 详细 代码下载:http://www.demodashi.com/demo/10706.html 基上篇[TouchID 指纹解锁] ...

  6. Appium移动自动化测试-----(十二)appium API 之 TouchAction 操作

    Appium的辅助类,主要针对手势操作,比如滑动.长按.拖动等. 1.按压控件 方法: press() 开始按压一个元素或坐标点(x,y).通过手指按压手机屏幕的某个位置. press(WebElem ...

  7. Android手势解锁, 九宫格解锁

    给大家介绍一个很好用的手势解锁控件ShapleLocker, 废话不多先上效果图: 这是一个第三方库, 可自己根据UI需求替换图标: 圆圈, 小箭头等等.. github地址: http://pane ...

  8. APP九宫格滑动解锁的处理

    写手机自动化测试脚本关于APP九宫格滑动解锁方面采用了appium API 之 TouchAction 操作. 先是用uiautomatorviewer.bat查询APP元素坐标: 手工计算九宫格每个 ...

  9. uiautomator2 实现App九宫格解锁

    App九宫格解锁 之前在testerhome社区看见codeskyblue大佬写过一种方法,但是这种办法存在一个弊端,那就是多个点的坐标是写死的,也就是说要是换了部手机,九宫格解锁就行不通了,于是就想 ...

随机推荐

  1. C++面试中的singleton类

    引子 “请写一个Singleton.”面试官微笑着和我说. “这可真简单.”我心里想着,并在白板上写下了下面的Singleton实现: 1 class Singleton 2 { 3 public: ...

  2. uvm_pkg——老板,打包带走

    Thus spake the master programmer: “After three day without programming, life becomes meaningless.” 编 ...

  3. java 核心技术卷一笔记 6 .2.3 接口 lambda 表达式 内部类

    6.2.3   对象克隆 Cloneable 接口,这个接口指示一个类提供了一个安全的clone方法.(稍作了解) 为一个对象引用的变量建立副本时,原变量和副本都是同一个对象的引用,任何一个变量改变都 ...

  4. htmlunit抓取js执行后的网页源码

    上次我不是写了一个自动抓取博客访问量吗 (点击打开链接) 可是昨天晚上我又运行的时候,发现不能用了.. 运行了几次 发现使用URLConnection 得到的网页源码和浏览器直接查看的不同. URLC ...

  5. 47.Number of Islands(岛的数量)

    Level:   Medium 题目描述: Given a 2d grid map of '1's (land) and '0's (water), count the number of islan ...

  6. 数据库_7_SQL基本操作——表操作

    SQL基本操作——表操作 建表的过程就是声明列的过程. 表与字段是密不可分的. 一.新增数据表 create table [if not exists] 表名( 字段名字 数据类型, 字段名字 数据类 ...

  7. selenium-介绍和安装

    前戏 相信大家对web自动化selenium都不陌生,是一个web自动化框架,我在第一家公司的时候,产品是两个星期一个版本,每一次发布测试都要进行回归测试,也就是大家说的点点点,后来我就想,能不能做成 ...

  8. [置顶] IIS应用程序池多工作进程设置及Session共享

    [置顶] IIS应用程序池多工作进程设置及Session共享   在调优iis的时候,朋友分享给我一个特别棒的设置方法步骤,感谢好朋友的分享. IIS应用程序池多工作进程设置及Session共享 1  ...

  9. Sniper OJ部分writeup

    0x00 shellcode pwn 因为题目直接有源码,我就不拖进IDA了,直接看代码 这是一个典型的栈溢出,我们只需要构造shellcode获得/bin/sh权限就可以得到flag.下面是所用脚本 ...

  10. Java代码实现文件上传(转载)

    刚刚发表了一篇Java发送电子邮件,以前真是没注意,commons里这么多常用项目,惭愧呀,直到现在回顾;要学习的真是太多了,还是缺少真正的学习能力... 这里用到的是commons-fileuplo ...