簡介
在網頁中我們經常使用縮放操作來便利的查看具體的信息,在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:\Users\DELL\Downloads\base.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=x*
0.2
,y=y*
0.2
).wait(
1000
).move_to(x=x*
0.4
,y=y*
0.4
).wait(
1000
).release()
49
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()
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:\Users\DELL\Downloads\base.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()
小結
? 好了,時間不早了,關于多點觸控宏哥就簡單的介紹到這里,大家晚安!!!
您的肯定就是我進步的動力。
如果你感覺還不錯,就請鼓勵一下吧!記得點波?
推薦
?哦!!!(點擊右邊的小球即可!?:))
? ? ? ?個人公眾號? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 微信群 ?(微信群已滿100,可以加宏哥的微信拉你進群,請備注:進群)? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

