from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction
from time import sleep """
class TouchAction(object):
def __init__(self, driver=None):
self._driver = driver
self._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):
执行前面的动作 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块
多点触摸对象是触摸动作的集合。
多点触控手势只有两种方法,即添加和执行。
add用于添加另一个触摸操作到多点触摸。
当perform执行被调用时,添加到多点触摸的所有触摸动作都被发送到AppII,并执行,就像它们同时发生一样。appium首先执行所有触摸动作的第一个事件,然后执行第二个,等等。
""" # el是定位元素的对象 # action0 = TouchAction().tap(el)
# action1 = TouchAction().tap(el)
# MultiAction().add(action0).add(action1).perform() desired_caps = {
"platformName":"Android",
"platformVersion":"5.1.1",
"deviceName":"127.0.0.1:62001",
"appPackage":"com.android.settings",
"appActivity":"com.android.settings/.Settings",
"noReset":"true",
"unicodeKeyboard":"true",
'resetKeyboard': 'true'
} driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #点击搜索
driver.find_element_by_id("com.android.settings:id/search").click()
driver.find_element_by_id("android:id/search_src_text").send_keys("安全\n")
driver.find_elements_by_id("android:id/search_src_text")[0].click() #屏幕安全保护
driver.find_element_by_id("android.widget.RelativeLayout").click()
driver.find_element_by_xpath("//*[@text = '图案']").click() sleep(5)
#解决问题思路:先获取元素坐标位置,再获取元素大小,然后切割图片,分别计算出每个点的坐标
#定位九宫格元素
jiu = 'resourceId("com.android.settings:id/lockPattern").index(2)'
local = driver.find_element_by_android_uiautomator(jiu).location
print("获取九宫格坐标位置:%s"%local) s = driver.find_element_by_android_uiautomator(jiu).size
print("获取九宫格宽和高:%s"%s) #获取九个点的坐标
google = {}
google[1] = (None,local["x"]+s["width"]/6,local["y"]+s["height"]/6)
google[2] = (None,local["x"]+s["width"]/6*3,local["y"]+s["height"]/6)
google[3] = (None,local["x"]+s["width"]/6*5,local["y"]+s["height"]/6)
google[4] = (None,local["x"]+s["width"]/6,local["y"]+s["height"]/6*3)
google[5] = (None,local["x"]+s["width"]/6*3,local["y"]+s["height"]/6*3)
google[6] = (None,local["x"]+s["width"]/6*5,local["y"]+s["height"]/6*3)
google[7] = (None,local["x"]+s["width"]/6,local["y"]+s["height"]/6*5)
google[8] = (None,local["x"]+s["width"]/6*3,local["y"]+s["height"]/6*5)
google[9] = (None,local["x"]+s["width"]/6*5,local["y"]+s["height"]/6*5)
print(google) def pianyi(a=1,b=2):
'''计算从a点到b点的偏移量'''
g1 = google[a]
g2 = google[b]
r = (None, g2[1]-g1[1], g2[2]-g1[2])
return r #解锁思路:先press按住第一个点,再wait等待,接着移动带第二个点,再wait,最后release释放手指,perform执行
# 执行解锁
TouchAction(driver).press(*google[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 - TouchAction操作的更多相关文章

  1. APP测试(appium+Python基础操作)一

    一.Appium入门案例 demo from appium import webdriver from time import sleep # server 启用参数 desired_caps = { ...

  2. Appium + python - input操作实例

    import osimport time as t adb = 'adb shell input tap 400 500'os.system(adb) t.sleep(5) class keyeven ...

  3. appium+python自动化38-adb shell按键操作(input keyevent)

    前言 接着上篇介绍input里面的按键操作keyevent事件,发送手机上常用的一些按键操作 keyevent 1.keyevent事件有一张对应的表,可以直接发送对应的数字,也可以方式字符串,如下两 ...

  4. appium+python自动化43-微信公众号webview操作

    前言 上一篇已经解决切换到微信公众号的webview上了,但是定位webview上元素的时候一直提示找不到,打印page_source也找不到页面上的元素,这个问题困扰了一整天,还好最后找到了原因, ...

  5. appium+python自动化33-解锁九宫格(TouchAction)

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

  6. Appium+Python之元素定位和操作

    一.常用识别元素的工具 uiautomatorviewer:Android SDK自带的一个工具,在tools目录下     二.元素定位   1.格式:find_element_by_定位方式(va ...

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

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

  8. appium+python自动化48-长按(long_press)

    前言 长按操作是经常会遇到的场景,通过driver可以直接调出long_press_keycode方法,但是这个方法是长按手机上某个按钮,比如长按电源键,长按home键. 长按某个元素或者长按屏幕上某 ...

  9. Appium+python自动化(二十八)- 滑呀滑,滑到奈何桥喝碗孟婆汤 - 高级滑动(超详解)

    简介 奈何桥上叹奈何,三生石前憾三生,彼岸花下非彼岸,奈何三生彼岸人. 相传过了鬼门关便上一条路叫黄泉路,路上盛开着只见花,不见叶的彼岸花.花叶生生两不见,相念相惜永相失,路尽头有一条河叫忘川河,河上 ...

随机推荐

  1. git添加user及repository

  2. 微信小程序开发过程中tabbar页面显示的相关问题及解决办法!

    在微信小程序的开发过程中如果有使用过tabbar的同学,我相信一定会遇到一些困扰.为什么有些时候代码中明明已经在app.json里面增加了tabbar,可以页面中就是不显示呢?可不可以有些页面显示ta ...

  3. 将登录代码模块化,然后用add address接口来调用它,success!

    登录模块,单独写成mylogin()方法,保存为modeltry119.py,然后接口的文件只写接口, 在post请求时,引用mylogin()返回的cookies就好了. requests.post ...

  4. Shiro_权限 URL 配置细节

    [部分细节] 1.[urls] 部分的配置,其格式是:“url=拦截器[参数],拦截器[参数]”: 2.如果当前请求的URL匹配 [urls] 部分的某个url模式,将会执行其配置的拦截器. 3.an ...

  5. Entity SQL rules for Wrapped and Unwrapped Results

    Here are some rules to remember for Entity SQL queries: 1.Use SELECT VALUE when projecting more than ...

  6. [luoguP1433] 吃奶酪(DP || Dfs)

    传送门 深搜加剪纸可A(O(玄学) 1274ms) ——代码 #include <cmath> #include <cstdio> #include <iostream& ...

  7. noip模拟赛 花

    [问题描述]商店里出售n种不同品种的花.为了装饰桌面,你打算买m支花回家.你觉得放两支一样的花很难看,因此每种品种的花最多买1支.求总共有几种不同的买花的方案?答案可能很大,输出答案mod p的值. ...

  8. poj 2823 二分法+单调队列

    #include<stdio.h> #include<string.h> #define N  1100000 int a[N]; int fmin[N],fmax[N]; i ...

  9. bzoj4518征途 斜率优化

    征途这是一道十分经典的斜率优化 我们可以从题目中的方差来想,也就很容易的到这个式子 \[ans=m^2*\frac{\sum_{i=1}^{m}{(x_i-{\overline{x}})^2}}{m} ...

  10. [poj2311]Cutting Game_博弈论

    Cutting Game poj-2311 题目大意:题目链接 注释:略. 想法: 我们发现一次操作就是将这个ICG对应游戏图上的一枚棋子变成两枚. 又因为SG定理的存在,记忆化搜索即可. 最后,附上 ...