Appium自動化(12):Appium常用操作之點擊&滑動類操作


點擊&滑動類操作

  在進行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.get_window_size()  獲取屏幕尺寸,然后通過百分比確定坐標,進行等比例換算

示例代碼:

# 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,實現向下滑動

通過元素進行拖動操作

2、drag_and_drop(self,origin_el,destination_el):將元素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.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)  # 通過坐標進行滑動操作

通過坐標進行滑動操作並有滑動時間控制

4、swipe(self,start_x,start_y,end_x,end_y,duration=None):從A點滑動至B點,滑動時間為毫秒,A點的坐標為start_x,start_y,B點的坐標為end_x,end_y

利用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.get_window_size()  獲取屏幕尺寸,然后通過屏幕的比例滑動
代碼示例:
# 從屏幕四分之三的位置滑動到四分之一的位置
driver.swipe(size['width']/2,size['height']*3/4,size['width']/2,size['height']*1/4,2000)

 

 

 


免責聲明!

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



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