點擊&滑動類操作
在進行app自動化的時候,經常會進行點擊或滑動的操作,比如點擊坐標,左右滑動,上下滑動等,Appium相應提供了解決方案。
坐標的開啟步驟:
開發者選項——指針位置開啟
坐標展示:
在flick和swipe中都提到了坐標,android界面坐標可以通過如下方式進行獲取:
1、uiautomatorviewer或inspector工具識別元素時的bounds屬性
2、通過android系統自帶的工具,進入設置--開發者選項--指針位置
常用的API如下:
一、點擊類操作
通過坐標進行點擊操作:
1、tap(self,positions,duration=None):模擬手指點擊(最多五個手指),可設置按住時間長度(毫秒)
positions:list類型,里面對象是元組,最多五個。如:[(100,20),(100,60)]
duration:持續時間,單位毫秒,如:500
代碼示例:
from appium import webdriver # 導入appium 驅動包 des = { 'platformName':'Android', 'platformVersion':'6.0.1', # 填寫android虛擬機/真機的系統版本號 'deviceName':'MuMu', # 填寫安卓虛擬機/真機的設備名稱 'appPackage':'com.android.settings', # 填寫被測app包名 'appActivity':'.Settings', # 填寫被測app的入口 'udid':'127.0.0.1:7555', # 填寫通過命令行 adb devices 查看到的udid 'noReset':True, # 是否重置APP 'unicodeKeyboard':True, # 是否支持中文輸入 'resetKeyboard':True, # 是否支持重置鍵盤 'newCommandTimeout':30 # 30秒沒發送新命令就斷開連接 } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des) # 指定坐標點擊 driver.tap([(300,1020)],2000) # 模擬手指輕輕的點擊 # 三個坐標同時點擊 driver.tap([(300,1020),(300,550),(380,1450)],2000) # 模擬手指輕輕的點擊
示例代碼:
# driver.tap([(300,1020)]) # 原先元素的坐標 print(300/size['width'],1020/size['height']) # 得到一個百分比 0.27 0.5 driver.tap([(int(size['width']*0.27),int(size['height']*0.5))]) # 通過百分比換算的元素坐標
二、滑動類操作
通過元素進行滑動操作
1、scroll(self,origin_el,destination_el,duration=None):模擬從元素origin_el滾動至元素destination_el
代碼示例:
e1 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="顯示"]') e2 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="電池"]') driver.scroll(e2,e1) # 從元素e2 滑動到元素e1,實現向下滑動
通過元素進行拖動操作
e1 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="顯示"]') e2 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="電池"]') driver.drag_and_drop(e2,e1) # 拖動(與scroll方法效果一樣)
通過坐標進行滑動操作
3、flick(self,start_x,start_y,end_x,end_y):按住A點后快速滑動至B點,A點的坐標為start_x,start_y,B點的坐標為end_x,end_y,使用flick方法進行滑動偶爾出現不穩定,可以把flick方法中的press改為long_press解決。
press:moveto中endx,endy是相對startx,start_y的偏移量並存在隨機滑動加速度或緩沖滑動
long_press:moveto中endx,endy是絕對值。
flick方法進行滑動偶爾出現不穩定,修改flick方法中的press改為long_press解決
修改前: 修改后:
代碼示例:
driver.flick(300,1020,300,550) # 通過坐標進行滑動操作
通過坐標進行滑動操作並有滑動時間控制
利用swipe方法實現滑動舉例
下滑操作:
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
driver.swipe(x/2,y/2,x/2,y/4,0) #上滑相反坐標即可(采用絕對坐標)
左滑操作:
driver.press_keycode(3)
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
driver.swipe(x/4*3,y/2,x/4*1,y/2,0)
# 滑動操作--推薦使用該方法 driver.swipe(300,1020,300,550,5000) # 通過坐標進行滑動操作滑動時間為3秒
# 從屏幕四分之三的位置滑動到四分之一的位置 driver.swipe(size['width']/2,size['height']*3/4,size['width']/2,size['height']*1/4,2000)