1. 程式人生 > >連續滑動操作

連續滑動操作

roi action 代碼實現 指定 行動 pass erl sele detail

動操作一般是兩點之間的滑動,而實際使用過程中用戶可能要進行一些多點連續滑動操作。如九宮格滑動操作,連續拖動圖片移動等場景。那麽在Appium中該如何模擬這類操作呢?

TouchAction

Touch Action包含一些列操作,比如按壓、長按、點擊、移動、暫停。由著些不同操作可以組成一套動作。使用TochAction需要先導入對應的模塊

from appium.webdriver.common.touch_action import TouchAction

按壓

方法:press() 開始按壓一個元素或坐標點(x,y)。通過手指按壓手機屏幕的某個位置。 press也可以接收屏幕的坐標(x,y)。

press(self, el=None, x=None, y=None)

TouchAction(driver).press(x=0,y=308)

長按

方法:longPress() 開始按壓一個元素或坐標點(x,y)。 相比press()方法,longPress()多了一個入參,既然長按,得有按的時間吧。duration以毫秒為單位。1000表示按一秒鐘。其用法與press()方法相同。

long_press(self, el=None, x=None, y=None, duration=1000)

點擊

方法:tap() 對一個元素或控件執行點擊操作。用法參考press()。

tap(self, element=None, x=None, y=None, count=1)

移動

方法:move_to() 將指針從上一個點移動到指定的元素或點。

move_to(self, el=None, x=None, y=None)

註意:

移動到目位置有時是算絕對坐標點,有時是基於前面一個坐標點的偏移量,這個要結合具體App來實踐。

暫停

方法:Wait()

wait(self, ms=0)

暫停腳本的執行,單位為毫秒。

釋放

方法release() 結束的行動取消屏幕上的指針。

release(self)

執行

perform() 執行的操作發送到服務器的命令操作。

perform(self)

TouchAction實戰——九宮格滑動操作

九宮格是一種比較常見的圖案加密方式,目前很多App都支持設置圖案鎖,Android原生系統也支持設九宮格圖案鎖屏。那麽我們該如何使用Appium進行滑動操作呢?

測試場景

安裝啟動隨手記App 啟動App後在密碼設置選項中開啟手機密碼並滑動九宮格設置如下圖形密碼:

技術分享圖片

測試環境

  • 夜神模擬器 Android 5.1.1
  • 隨手記Android版 V10.5.6.0
  • Win 10 64bit
  • Appium 1.7.2

代碼實現

touch_action.py

from appium import webdriver

from time import sleep

from appium.webdriver.common.touch_action import TouchAction

from selenium.webdriver.support.ui import WebDriverWait

from selenium.common.exceptions import NoSuchElementException

desired_caps={}

desired_caps[‘platformName‘]=‘Android‘

desired_caps[‘platformVersion‘]=‘5.1.1‘

desired_caps[‘deviceName‘]=‘127.0.0.1:62025‘

desired_caps[‘app‘]=r‘C:\Users\Shuqing\Desktop\mymoney.apk‘

desired_caps[‘appPackage‘]=‘com.mymoney‘

desired_caps[‘appActivity‘]=‘com.mymoney.biz.splash.SplashScreenActivity‘

driver = webdriver.Remote(‘http://localhost:4723/wd/hub‘, desired_caps)

driver.implicitly_wait(5)

def get_size():

x=driver.get_window_size()[‘width‘]

y=driver.get_window_size()[‘height‘]

return x,y

def swipeLeft():

l=get_size()

x1=int(l[0]*0.9)

y1=int(l[1]*0.5)

x2=int(l[0]*0.1)

driver.swipe(x1,y1,x2,y1,1000)

def swipeUp():

l = get_size()

x1 = int(l[0] * 0.5)

y1 = int(l[1] * 0.95)

y2 = int(l[1] * 0.35)

driver.swipe(x1, y1, x1, y2, 1000)

#等待啟動頁面元素,然後向左滑動兩次,跳過引導頁面

WebDriverWait(driver,6).until(lambda x:x.find_element_by_id("com.mymoney:id/next_btn"))

for i in range(2):

swipeLeft()

sleep(1)

#點擊“開始隨手記”按鈕

driver.find_element_by_id(‘com.mymoney:id/begin_btn‘).click()

#檢測是否有活動頁面彈窗,如果有就點擊關閉

try:

closBtn=driver.find_element_by_id(‘com.mymoney:id/close_iv‘)

except NoSuchElementException:

pass

else:

closBtn.click()

#點擊更多菜單

driver.find_element_by_id(‘com.mymoney:id/nav_setting_btn‘).click()

#等待界面菜單加載出來,然後向上滑動

WebDriverWait(driver,6).until(lambda x:x.find_element_by_id("com.mymoney:id/content_container_ly"))

swipeUp()

#點擊高級菜單

driver.find_element_by_android_uiautomator(‘new UiSelector().text("高級")‘).click()

#點擊密碼與手勢密碼菜單

driver.find_element_by_id(‘com.mymoney:id/password_protected_briv‘).click()

#點擊手勢密碼保護

driver.find_element_by_id(‘com.mymoney:id/lock_pattern_or_not_sriv‘).click()

#連續滑動兩次設置圖案密碼

for i in range(2):

TouchAction(driver).press(x=243,y=381).wait(2000)\

.move_to(x=455,y=390).wait(1000)\

.move_to(x=643,y=584).wait(1000)\

.move_to(x=647,y=784).wait(1000)\

.release().perform()

參考資料:

https://blog.csdn.net/weixin_40180628/article/details/79170053

連續滑動操作