日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/21 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 appium+python自动化33-解锁九宫格(TouchAction) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。