Appium+python自動化(二十九)- 模擬手指在手機上多線多點作戰 - 多點觸控(超詳解)

Appium+python自動化(二十九)- 模擬手指在手機上多線多點作戰 - 多點觸控(超詳解)
簡介
在網頁中我們經常使用縮放操作來便利的查看具體的信息,在appium中使用MultiAction多點觸控的類來實現。MultiAction是多點觸控的類,可以模擬用戶多點操作。主要包含加載add()和執行perform()兩個方法.

問題思考
在使用地圖App中,我們經常需要對界面進行縮放操作來更加便利的查看位置。那麼在Appium中怎樣去模擬這類操作呢?

MultiAction
MultiAction 是多點觸控的類,可以模擬用戶多點操作。主要包含 add() 和 perform() 兩個方法, MultiAction可以結合前面所學的 ActionTouch可以模擬出用戶的多個手指滑動的操作效果; MultiAction一般和TouchAction結合使用,故需要導入以下模塊:

from appium.webdriver.common.multi_action import MultiAction

from appium.webdriver.common.touch_action import TouchAction
加載:
方法add(self, *touch_actions)將TouchAction對象添加到MultiAction中,稍後再執行。

參數:
touch_actions - 一個或多個TouchAction對象,描述一個手指要執行的動作鏈
用法
複製代碼
a1 = TouchAction(driver)

a1.press(el1).move_to(el2).release()

a2 = TouchAction(driver)

a2.press(el2).move_to(el1).release()

MultiAction(driver).add(a1, a2)
複製代碼
執行
perform(self) 執行存儲在對象中的操作。

用法
複製代碼
a1 = TouchAction(driver)

a1.press(el1).move_to(el2).release()

a2 = TouchAction(driver)

a2.press(el2).move_to(el1).release()

MultiAction(driver).add(a1, a2).perform()
複製代碼
Ps:是不是有點類似Python裏面的多線程和多進程的使用。

多點觸控操作實踐——地圖App縮放
測試場景
安裝啓動百度地圖Android app 進入地圖後分別進行放大縮小操作

測試環境
1.宏哥的系統環境是Windows 10版本 64位系統

2.宏哥的dk版本:"1.8.0_181"

3.宏哥的appium版本:1.4.16

4.selenium:3.141.0
安裝selenium:

輸入指令pip install selenium

驗證安裝成功:pip show selenium

5.測試設備:Android 5.1.1 (不能低於5.0版本)

6.Python:3.7.2
命令:python -V ,回車即可。

7.百度地圖Android版 V10.6.5

滑動原理圖解

放大(Zoom):則手指分別從B>A,C>D同時向外移動放大頁面

縮小(pinch):則手指分別從A>B,D>C同時向中間移動縮小頁面

想法與思路
安裝啓動百度地圖APP
啓動後代碼實現點擊“同意”,然後接着點擊“進入地圖”
進入地圖由於最近剛過完七夕,有個搶紅包的活動,將其關閉
執行縮小函數3次,將地圖縮小三次;緊接着執行放大函數,將地圖放大三次。
代碼實現
(1)安裝啓動百度地圖

(2)點擊“同意”,然後接着點擊“進入地圖

(3)進入地圖由於最近剛過完七夕,有個搶紅包的活動,將其關閉
活動關閉定位

代碼實現

(4)執行縮小函數3次,將地圖縮小三次;緊接着執行放大函數,將地圖放大三次

代碼運行結果

運行代碼夜神模擬器自動化操作

參考代碼
複製代碼
1 # coding=utf-8
2 # 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
3
4 # 2.註釋:包括記錄創建時間,創建人,項目名稱。
5 '''
6 Created on 2019-8-08
7 @author: 北京-宏哥 QQ交流羣:707699217
8 Project:學習和使用appium自動化測試-多點觸控操作
9 '''
10 # 3.導入模塊
11 from appium import webdriver
12 from selenium.common.exceptions import NoSuchElementException
13 from appium.webdriver.common.touch_action import TouchAction
14 from appium.webdriver.common.multi_action import MultiAction
15
16 desired_caps={}
17 desired_caps['platformName']='Android'
18 desired_caps['deviceName']='127.0.0.1:62001'
19 desired_caps['platforVersion']='5.1.1'
20
21 desired_caps['app']=r'C:UsersDELLDownloadsbase.apk'
22 desired_caps['appPackage']='com.baidu.BaiduMap'
23 desired_caps['appActivity']='com.baidu.baidumaps.WelcomeScreen'
24
25 driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
26 driver.implicitly_wait(5)
27
28 x=driver.get_window_size()['width']
29 y=driver.get_window_size()['height']
30 #點擊同意
31 driver.find_element_by_id('com.baidu.BaiduMap:id/ok_btn').click()
32 #點擊進入地圖
33 driver.find_element_by_id('com.baidu.BaiduMap:id/btn_enter_map').click()
34
35 #檢測是否有活動頁面彈窗,如果有就點擊關閉(宏哥做的時候有個領紅包的活動頁面)
36 try:
37 closeBtn=driver.find_element_by_id('com.baidu.BaiduMap:id/guide_close')
38 except NoSuchElementException:
39 pass
40 else:
41 closeBtn.click()
42
43 def pinch():
44 action1=TouchAction(driver)
45 action2=TouchAction(driver)
46 pinch_action=MultiAction(driver)
47
48 action1.press(x=x0.2,y=y0.2).wait(1000).move_to(x=x0.4,y=y0.4).wait(1000).release()
49 action2.press(x=x0.8,y=y0.8).wait(1000).move_to(x=x0.6,y=y0.6).wait(1000).release()
50
51 pinch_action.add(action1,action2)
52 print('start pinch...')
53 pinch_action.perform()
54
55 def zoom():
56 action1 = TouchAction(driver)
57 action2 = TouchAction(driver)
58 zoom_action = MultiAction(driver)
59
60 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()
61 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()
62
63 zoom_action.add(action1,action2)
64 print("start zoom...")
65 zoom_action.perform()
66
67 if name == '__main__':
68 for i in range(3):
69 pinch()
70
71 for i in range(3):
72 zoom()
複製代碼
合格開發的參考代碼
複製代碼

coding=utf-8

1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行

2.註釋:包括記錄創建時間,創建人,項目名稱。

'''
Created on 2019-8-08
@author: 北京-宏哥 QQ交流羣:707699217
Project:學習和使用appium自動化測試-多點觸控操作
'''

3.導入模塊

from appium import webdriver
from selenium.common.exceptions import NoSuchElementException
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction

初始化

desired_caps={}
desired_caps['platformName']='Android'
desired_caps['deviceName']='127.0.0.1:62001'
desired_caps['platforVersion']='5.1.1'

desired_caps['app']=r'C:UsersDELLDownloadsbase.apk'
desired_caps['appPackage']='com.baidu.BaiduMap'
desired_caps['appActivity']='com.baidu.baidumaps.WelcomeScreen'

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

x=driver.get_window_size()['width']
y=driver.get_window_size()['height']

點擊同意

driver.find_element_by_id('com.baidu.BaiduMap:id/ok_btn').click()

點擊進入地圖

driver.find_element_by_id('com.baidu.BaiduMap:id/btn_enter_map').click()

檢測是否有活動頁面彈窗,如果有就點擊關閉(宏哥做的時候有個領紅包的活動頁面)

try:

closeBtn=driver.find_element_by_id('com.baidu.BaiduMap:id/guide_close')

except NoSuchElementException:

pass

else:

closeBtn.click()

定義縮小函數

def pinch():

action1=TouchAction(driver) #第一個手勢
action2=TouchAction(driver) #第二個手勢
pinch_action=MultiAction(driver) #縮小手勢

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()

pinch_action.add(action1,action2) #加載
print('start pinch...')
pinch_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)  #加載
print("start zoom...")
zoom_action.perform()  #執行

主函數調用子函數

__name=’__main__’表示執行當前py文件;否則當前文件屬於調用模塊

if name == '__main__':

for i in range(3):     #執行縮小函數3次,range(3)代表執行0,1,2共3次
    pinch()

for i in range(3):     #執行放大函數3次,range(3)代表執行0,1,2共3次
    zoom()

複製代碼
原文地址https://www.cnblogs.com/du-hong/p/11319445.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章