告別諾基亞時代,現在滿大街都是觸屏智能機。觸屏機釋放了物理鍵盤,通過手勢動作便能達到操作手機功能的目的。所以要進行APP自動化,模擬觸控操作是必要的。
1、左右滑動swipe(int x1,int y1,int x2,int y1, Duration duration)
x = driver.get_window_size()['width']#獲取手機寬度
y = driver.get_window_size()['height']#獲取手機高度
x1 = int(x*0.9)#開始滑動的座標x1
y1=int(y*0.5)#開始滑動的座標y1
x2=int(x*0.1)#結束點座標x2
driver.swipe(x1,y1,x2,y1,1000)#1000爲滑動時間(默認5毫秒)
2、按壓某個位置press(WebElement el, int x, int y)
press() 開始按壓一個元素或座標點(x,y)。通過手指按壓手機屏幕的某個位置。類似於點擊。
TouchAction(driver).press(x=0,y=308)
3、長按long_press(WebElement el, int x, int y, Duration duration)
longPress() 長時間按壓一個元素或座標點(x,y)。 相比press()方法,longPress()多了一個入參duration,以毫秒爲單位。其用法與press()方法相同。
action = TouchAction(driver)
action.longPress(names.get(200),1000)
4、點擊tap(WebElement el, int x, int y)
tap() 對一個元素或控件執行點擊操作。
action = TouchAction(driver)
element = driver.find_element_by_id(‘android:id/button2’)
action.tap(element,200 ,200)
5、移動moveTo(WebElement el, int x, int y)
move_to() 將指針(光標)從上一個點移動到指定的元素或點。
注意:移動到目標位置有時是算絕對座標點,有時是基於前面一個座標點的偏移量,這個要結合具體App來實踐。
action = TouchAction(driver)
element = driver.find_element_by_id(‘android:id/button2’)
action.move_to(element,200 ,200)
6、暫停wait(Duration duration)
暫停腳本的執行,單位爲毫秒。
wait(2000)
7、釋放release()
release() 結束的行動取消屏幕上的指針。
TouchAction(driver).press(x=0,y=308).release()
8、執行perform()
perform() 執行的操作發送到服務器的命令操作。
TouchAction(driver).press(x=0,y=308).release().perform()
9、多點觸控
多點觸控一般用於地圖的縮放,需要用到MultiAction類。
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
#縮小
def pinch():
action1=TouchAction(driver)
action2=TouchAction(driver)
zoom_action=MultiAction(driver)
sleep(10)
action1.press(x=x*0.2,y=y*0.2).wait(1000).move_to(x=x*0.4,y=y*0.4).wait(1000).release()
action2.press(x=x*0.8,y=y*0.8).wait(1000).move_to(x=x*0.6,y=y*0.6).wait(1000).release()
print('start pinch...')
zoom_action.add(action1,action2)
zoom_action.perform()
#放大
def zoom():
action1=TouchAction(driver)
action2=TouchAction(driver)
zoom_action=MultiAction(driver)
action1.press(x=x*0.4,y=y*0.4).wait(1000).move_to(x=x*0.2,y=y*0.2).wait(1000).release()
action2.press(x=x*0.6,y=y*0.6).wait(1000).move_to(x=x*0.8,y=y*0.8).wait(1000).release()
zoom_action.add(action1,action2)
zoom_action.perform()