連續滑動操作
動操作一般是兩點之間的滑動,而實際使用過程中用戶可能要進行一些多點連續滑動操作。如九宮格滑動操作,連續拖動圖片移動等場景。那麽在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
連續滑動操作