TouchAction

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

class TouchAction(object):
    def __init__(self, driver=None):
        self._driver = driver
        self._actions = []

    def tap(self, positions, duration=None):
        模拟手指点击,可设置按住时间长度(毫秒)    用法 driver.tap([(x,y),(x1,y1)],500)

    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):
  移动手指到另外一个元素,或者坐标,appium-desk1.6之后改用的是绝对坐标!!!       
    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。press和move_to里面都有三个参数,第一个参数默认为None,所以我返回的参数里面第一个写None.

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按住第一个点,再release手指,接着移动带第二个点,再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 gongge

# 执行解锁
TouchAction(driver).press(*gongge[1]).wait(300).move_to(*gongge[2]).wait(300).move_to(*gongge[3]).wait(300).
  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. 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程

    目錄: 開玩樹莓派(一):安裝Raspbian系統 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程 開玩樹莓派(三):Python編程 開玩樹莓派(四):GPIO控制和遠程 ...

  2. Apache is running a threaded MPM, but your PHP module is not compiled to be threadsafe. you need to recompile php. pre-configuration failed

    手动配置想要组合版本的wamp环境时,在服务器上直接下载的几个安装包怎么都组合安装不成功,纠结很久,终于找到原因.配置apache支持php后apache一直无法成功启动.后来发现php是nts的版本 ...

  3. 浏览器详谈及其内部工作机制 —— web开发必读

    浏览器介绍 如今,浏览器格局基本上是五分天下,分别是:IE.Firefox.Safari.Chrome.Opera,而浏览器引擎就更加集中了,主要是四大巨头:IE的浏览器排版引擎Trident,目前随 ...

  4. 清理ThreadLocal

    在我很多的课程里(master.concurrency.xj-conc-j8),我经常提起ThreadLocal.它经常受到我严厉的指责要尽可能的避免使用.ThreadLocal是为了那些使用完就销毁 ...

  5. COGS 2280. [HZOI 2015]树白黑

    ★★   输入文件:B_Tree.in   输出文件:B_Tree.out   简单对比时间限制:2 s   内存限制:512 MB [题目描述] 给定一棵有根树,树根为1,一开始这棵树所有节点均为白 ...

  6. 用Hexo免费搭建你自己的博客

    Hexo基于node.js,可用于生成静态博客,结合github和Mac,可以专注创作了. 深入学习见文末引用. hexo安装 brew install node npm install hexo-c ...

  7. 转载:收费版APP三年总结(个人经验+数据图分享)

    各位朋友好,apop感觉这里的朋友有许多是以广告收入为主,所以apop来分享另外一块(收费版APP)的个人三年来的总结分享,希望对各位有帮助.首 先,其实在AppStore(或GooglePlay)上 ...

  8. HDU-6035 Colorful Tree(树形DP) 2017多校第一场

    题意:给出一棵树,树上的每个节点都有一个颜色,定义一种值为两点之间路径中不同颜色的个数,然后一棵树有n*(n-1)/2条 路径,求所有的路径的值加起来是多少. 思路:比赛的时候感觉是树形DP,但是脑袋 ...

  9. android 焦点 ListView 点击事件获取失败

    1. 在ListView 中, 创建一个app_item.xml 布局文件 在布局文件中有如下的代码:  <CheckBox         android:id="@+id/cb_t ...

  10. winhex与磁盘格式与 数据恢复

    第一阶段: 熟悉WinHex的使用. n 熟悉磁盘工具的使用. n 利用WinHex查看物理磁盘和逻辑磁盘. n 了解WinHex中相关工具的用法. 以管理员身份运行winhex(以便之后修改) 上方 ...