UI自動化測試:TouchAction & TouchActions區別


一、前言

在做App自動化測試時,經常需要進行手勢操作,比如滑屏、放大、縮小等,這里就涉及到TouchAction & TouchActions兩個模塊。TouchAction和TouchActions主要用於App、webview的手勢操作,用法與PC端的ActionChains類似。

1、TouchAction、TouchActions區別

TouchAction是appium的輔助類,主要是一些手勢操作。TouchActions是Selenium的輔助類,在TouchAction的基礎上做了些功能補充。TouchAction和TouchActions只能用於單個手指的操作,MultiAction可以模擬多指操作。

二、TouchAction介紹

1、官方文檔

http://appium.io/docs/cn/writing-running-appium/touch-actions/

2、導入TouchAction模塊

from appium.webdriver.common.touch_action import TouchAction

3、操作方法

1)tap():點擊操作

對一個元素或控件執行點擊操作

方法:tap(element=None, x=None, y=None, count=1)

示例:

# 操作的元素對象 ele_str = driver.find_element(By.XPATH, "//span[text()='立即體驗']") # 通過定位到的元素點擊 TouchAction(driver).tap(ele_str).release().perform() # 通過元素坐標點擊 TouchAction(driver).tap(x=360, y=1320).release().perform() # 以定位的元素左上角為原點,分別向下、向右偏移10個像素點 TouchAction(driver).tap(ele_str, 10, 10).release().perform()

2) press():按壓操作

按壓一個元素或坐標點(x,y),通過手指按壓手機屏幕的某個位置。

方法:press(el=None, x=None, y=None)

示例:

# 操作的元素對象 ele_str = driver.find_element(By.XPATH, "//span[text()='立即體驗']") # 按壓定位到的元素 TouchAction(driver).press(ele_str).release().perform() # 按壓元素坐標點 TouchAction(driver).press(x=360, y=1320).release().perform() # 以元素的左上角為原點,分別向下、向右偏移10個像素點,然后按壓釋放 TouchAction(driver).press(ele_str, 10, 10).release().perform()

3) long_press():長按操作

長按一個元素或坐標點(x,y)。 相比press()方法,long_press()多了一個入參duration。duration指按壓持續時間,以毫秒為單位,1000表示按一秒鍾,必須是int類型。其用法與press()方法相同。

方法:long_press(el=None, x=None, y=None, duration=1000)

示例:

# 操作的元素對象 ele_str = driver.find_element(By.XPATH, "//span[text()='立即體驗']") # 長按元素,持續5秒時間 TouchAction(driver).long_press(ele_str, duration=5000).release().perform() # 長按坐標點,持續5秒時間 TouchAction(driver).long_press(x=360, y=1320, duration=5000).release().perform() # 以元素的左上角為原點,分別向下、向右偏移10個像素點,長按5秒然后釋放 TouchAction(driver).long_press(ele_str, 10, 10, duration=5000).release().perform()

4)move_to():移動

 

將指針或光標從上一個點移動到指定的元素或坐標點。

方法:move_to(el=None, x=None, y=None) 

示例:

# 操作的元素對象 ele_str = driver.find_element(By.XPATH, "//span[text()='立即體驗']") # 在坐標(360,1320)處按下,滑動到坐標(700,1320)處,然后釋放手指 TouchAction(driver).press(x=360, y=1320).move_to(x=700, y=1320).release().perform() # 在元素ele_str所在位置處按下,滑動至元素ele_end處,然后釋放手指 TouchAction(driver).press(ele_str).move_to(ele_end).release().perform()

5)wait():等待

執行手勢動作時,等待一段時間。wait(int ms),單位是毫秒,1s = 1000ms

示例:

# 在坐標(360,1320)處按下后等待2秒,然后滑動至坐標(700,1320)處 TouchAction(self.driver).press(x=360, y=1320).wait(2000).move_to(x=700, y=1320).release().perform()

6)release():釋放

釋放屏幕上的指針操作,與按下和長按聯合使用。

7) perform():執行

發送需要執行的動作指令集至服務器。

8)連續滑屏

App自動化測試時有時需要滑動多個點,可以使用多個move_to()組合。

示例:

TouchAction(driver).press(x=10, y=10).wait(2000) \ .move_to(x=20, y=20).wait(1000) \ .move_to(x=30, y=30).wait(1000) \ .release().perform()

三、TouchActions介紹

1、說明文檔

TouchActions官方文檔:

https://www.selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.touch_actions.html

TouchActions中文版文檔:

https://liushilive.github.io/github_selenium_docs_api_py/md/selenium/webdriver/common/touch_actions.html

2、導入TouchActions模塊

from selenium.webdriver.common.touch_actions import TouchActions

3、操作方法

1) tap(on_element):單擊

點擊給定的元素。

參數on_element: 要點按的元素

2) double_tap(on_element):雙擊

雙擊特定元素。

參數on_element: 要點按的元素。

3) tap_and_hold(xcoord, ycoord)

在給定坐標處按下並保持。

參數:

xcoord: X 軸坐標

ycoord: Y 軸坐標

4) move(xcoord, ycoord)

按壓住某點移動至指定位置。

參數:

xcoord: X 軸坐標

ycoord: Y 軸坐標

5) scroll(xoffset, yoffset) 

觸摸並滾動,向 xoffset 和 yoffset 移動。

參數:

xoffset: X 軸偏移量

yoffset: Y 軸偏移量

6) scroll_from_element(on_element, xoffset, yoffset)

觸摸並滾動從 on_element 開始,向 xoffset 和 yoffset 移動。

參數:

on_element: 滾動開始的元素

xoffset: X 軸偏移量

yoffset: Y 軸偏移量

7) long_press(on_element)

長按一個元素。

參數:

on_element: 長按的元素

8) flick(xspeed, yspeed)

從屏幕上的任意位置開始輕彈。

參數:

xspeed: X 軸速度,以每秒像素為單位。

yspeed: Y 軸速度,以每秒像素為單位。

9) flick_element(on_element, xoffset, yoffset, speed)

從 on_element 開始輕彈,然后以指定的速度移動 xoffset 和 yoffset。

參數:

on_element: Flick 將從元素的中心開始。

xoffset: X 軸偏移量

yoffset: Y 軸偏移量

speed: 每秒偏移的像素

10)release(xcoord, ycoord)

在指定位置釋放先前發出的 tap 和 hold 命令。

參數:

xcoord: X 軸坐標

ycoord: Y 軸坐標

11)perform()

發送需要執行的動作指令集至服務器。

4、Tips

TouchActions我還沒找到使用場景,后面遇到了再補上使用示例。

TouchAction和TouchActions方法中用到的坐標可以通過下面的方法獲取:

1)獲取屏幕大小

print("獲取屏幕大小:", driver.get_window_size())

執行結果:獲取屏幕大小: {'width': 720, 'height': 1491}

2)獲取元素大小

# 操作的元素對象
ele_str = driver.find_element(By.XPATH, "//span[text()='立即體驗']") print("location獲取元素坐標:", ele_str.location) print("location獲取元素坐標X值:", ele_str.location["x"]) print("size獲取元素大小:", ele_str.size) print("size獲取元素的長度:",       ele_str.size['width']) print("rect獲取元素坐標和大小:", ele_str.rect)

執行結果:

location獲取元素坐標: {'x': 260, 'y': 1290}

location獲取元素坐標X值: 260

size獲取元素大小: {'height': 60, 'width': 200}

size獲取元素的長度: 200

rect獲取元素坐標和大小: {'height': 60, 'width': 200, 'x': 260, 'y': 1290}

3)手機App坐標與Webview頁面坐標

在做UI自動化測試用到TouchAction和TouchActions時,有的需要獲取元素的坐標,然后對坐標進行press、tap等操作。在進行手機App測試時,webview頁面獲取的坐標會有區別。

 

如上圖,title部分是APP原生的,下面部分是webview環境,在獲取webview部分的“看看關注”按鈕的坐標時,是以webview環境的左上角為原點計算的,這樣獲取的坐標與屏幕的像素坐標點不一致,在使用TouchAction對“看看關注”坐標進行操作時,會得不到預期結果。

只有Android、ios原生的App環境獲取的坐標可以使用TouchAction操作。

4)偏移量

TouchActions有的操作方法中是使用xoffset、yoffset偏移量來操作的,這個偏移量是以操作的元素中心為原點的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM