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, element=None, x=None, y=None, count=1):
  6. 模拟手指触摸屏
  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. 移动手指到另外一个元素,或者坐标,注意这里坐标不是绝对坐标,是偏移量
  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

  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

偏移量

备注下,这个地方,后面的appium有更新了,现在不用偏移量,直接用坐标就可以了,踩坑的小伙伴注意下,下面代码是很久之前写的,现在没维护了

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

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

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

移动手指

1.解锁思路:先press按住第一个点,再wait等待,接着移动带第二个点,再wait,最后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. def pianyi(a=1,b=2):
  33. '''计算从a点到b点的偏移量'''
  34. g1 = gongge[a]
  35. g2 = gongge[b]
  36. r = (None, g2[1]-g1[1], g2[2]-g1[2])
  37. return r
  38. # 执行解锁
  39. TouchAction(driver).press(*gongge[1]).wait(300).move_to(*pianyi(1,2)).wait(300).move_to(*pianyi(2,3)).wait(
  40. 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(
  41. 300).release().perform()

备注下,这个地方,后面的appium有更新了,现在不用偏移量,直接用坐标就可以了,踩坑的小伙伴注意下,代码是很久之前写的,现在没维护了

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

appium+python自动化33-解锁九宫格(TouchAction)的更多相关文章

  1. Appium+python自动化

    名称 链接地址 Appium+python自动化8-Appium Python API(上) http://mp.weixin.qq.com/s/WvpT5oRrYY22avI95FuypQ Appi ...

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

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

  3. appium+python自动化52-多点触控MultiAction

    前言 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块 TouchAction用法参考前面的一篇:appium+python自动化33-TouchAction 多点触 ...

  4. appium+python自动化61-中文输入乱码问题解决

    前言 在夜神模拟器上输入中文,发现是乱码,将unicodeKeyboard和resetKeyboard参数设置为True了,发现还是没法解决. 打开手机设置语言和输入法,发现找不到Appium And ...

  5. Appium+python自动化20-查看iOS上app元素属性

    前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素 Mac版的appium1.6的 ...

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

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

  7. appium+python自动化50-生成定位对象模板templet(jinja2)

    前言 每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板 python里面生成模板有两个模块可以 ...

  8. Appium+python自动化20-查看iOS上app元素属性【转载】

    前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素Mac版的appium1.6的版 ...

  9. Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP【转载】

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

随机推荐

  1. dell n2024交换机配置

    1.putty串口设置 9600 8 1 None None 2.连接 3.console>en 4.带内管理IP地址 console(config)#username admin passwo ...

  2. java语言基础-变量

    一丶变量的基本概念 1.什么是变量 (1).内存中的一个存储区域 (2).该区域有自己的名称(变量名),和类型(数据类型) (3.)该区域的数据可以在同一类型范围内不断变化(定义变量的主要目的是因为数 ...

  3. c# Request.Files["xx"]取不到值解决办法

  4. Linux:tree命令详解

    tree 以树状图列出目录的内容 语法 tree(选项)(参数) 选项 -a:显示所有文件和目录: -A:使用ASNI绘图字符显示树状图而非以ASCII字符组合: -C:在文件和目录清单加上色彩,便于 ...

  5. Gcov 详解 + 内核函数覆盖率测试方法详述及产生错误解决办法

    http://blog.csdn.net/wangyezi19930928/article/details/42638345 http://www.uml.org.cn/Test/201208311. ...

  6. wma wmv asf格式分析

    原文链接:http://blog.csdn.net/werocpp/article/details/5594067 原文链接:http://blog.chinaunix.net/uid-2075819 ...

  7. UDP:rfc768/广播和多播/IGMP

    封装情况:

  8. 如何修改localhost为自己指定的域名

    一般在windows电脑中localhost的配置一般都在电脑的C:\Windows\System32\drivers\etc这个路径下 ​进入后,打开hosts文件通过编辑器或者其他的软件打开,打开 ...

  9. Java项目中使用Log4J

    Log4J下载 官网:http://logging.apache.org/log4j/ Log4J 1.2下载地址:http://logging.apache.org/log4j/1.2/downlo ...

  10. 关于dyld: Library not loaded

    在接入智凡迪的sdk过程中,遇到以下问题: dyld: Library not loaded: @rpath/SDKFramework.framework/SDKFramework   Referen ...