appium+python自動化33-解鎖九宮格(TouchAction)

來源:互聯網
上載者:User

標籤:pytho   第一個   size   roi   return   time   AC   red   site   

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, 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).locationprint("擷取九宮格座標位置:%s"%loc)s = driver.find_element_by_android_uiautomator(jiu).sizeprint("擷取九宮格寬和高:%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-8from appium import webdriverfrom appium.webdriver.common.touch_action import TouchActionfrom time import sleepdesired_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).locationprint("擷取九宮格座標位置:%s"%loc)s = driver.find_element_by_android_uiautomator(jiu).sizeprint("擷取九宮格寬和高:%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自動化33-解鎖九宮格(TouchAction)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.