簡介
在網(wǎng)頁中我們經(jīng)常使用縮放操作來便利的查看具體的信息,在appium中使用MultiAction多點觸控的類來實現(xiàn)。MultiAction是多點觸控的類,可以模擬用戶多點操作。主要包含加載add()和執(zhí)行perform()兩個方法.
問題思考
在使用地圖 App中,我們經(jīng)常需要對界面進行縮放操作來更加便利的查看位置。那么在Appium中怎樣去模擬這類操作呢?
MultiAction
MultiAction 是多點觸控的類,可以模擬用戶多點操作。主要包含? add() ?和? perform() ? 兩個方法, MultiAction可以結(jié)合前面所學(xué)的? ActionTouch 可以模擬出用戶的多個手指滑動的操作效果;?MultiAction一般和TouchAction結(jié)合使用,故需要導(dǎo)入以下模塊:
from appium.webdriver.common.multi_action import MultiAction from appium.webdriver.common.touch_action import TouchAction
加載:
方法 add(self, *touch_actions)將TouchAction對象添加到MultiAction中,稍后再執(zhí)行。
參數(shù):
- touch_actions - 一個或多個TouchAction對象,描述一個手指要執(zhí)行的動作鏈
用法
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)
執(zhí)行
perform(self) 執(zhí)行存儲在對象中的操作。
用法
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 進入地圖后分別進行放大縮小操作
測試環(huán)境
1.宏哥的系統(tǒng)環(huán)境是Windows 10版本 64位系統(tǒng)
?
2.宏哥的dk版本:"1.8.0_181"
3.宏哥的appium版本:1.4.16?
4.selenium:3.141.0
安裝selenium:
輸入指令pip install selenium
驗證安裝成功:pip show selenium
5.測試設(shè)備: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
- 啟動后代碼實現(xiàn)點擊“同意”,然后接著點擊“進入地圖”
- 進入地圖由于最近剛過完七夕,有個搶紅包的活動,將其關(guān)閉
- 執(zhí)行縮小函數(shù)3次,將地圖縮小三次;緊接著執(zhí)行放大函數(shù),將地圖放大三次。
代碼實現(xiàn)
(1)安裝啟動百度地圖
(2)點擊“同意”,然后接著點擊“進入地圖
(3)進入地圖由于最近剛過完七夕,有個搶紅包的活動,將其關(guān)閉
活動關(guān)閉定位
代碼實現(xiàn)
(4)執(zhí)行縮小函數(shù)3次,將地圖縮小三次;緊接著執(zhí)行放大函數(shù),將地圖放大三次
代碼運行結(jié)果
運行代碼夜神模擬器自動化操作
參考代碼
1 # coding=utf- 8 2 # 1 .先設(shè)置編碼,utf- 8可支持中英文,如上,一般放在第一行 3 4 # 2 .注釋:包括記錄創(chuàng)建時間,創(chuàng)建人,項目名稱。 5 ''' 6 Created on 2019 - 8 - 08 7 @author: 北京-宏哥 QQ交流群: 707699217 8 Project:學(xué)習(xí)和使用appium自動化測試- 多點觸控操作 9 ''' 10 # 3 .導(dǎo)入模塊 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 #檢測是否有活動頁面彈窗,如果有就點擊關(guān)閉(宏哥做的時候有個領(lǐng)紅包的活動頁面) 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()
合格開發(fā)的參考代碼
# coding=utf- 8 # 1 .先設(shè)置編碼,utf- 8可支持中英文,如上,一般放在第一行 # 2 .注釋:包括記錄創(chuàng)建時間,創(chuàng)建人,項目名稱。 ''' Created on 2019 - 8 - 08 @author: 北京 -宏哥 QQ交流群: 707699217 Project:學(xué)習(xí)和使用appium自動化測試 - 多點觸控操作 ''' # 3 .導(dǎo)入模塊 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() #檢測是否有活動頁面彈窗,如果有就點擊關(guān)閉(宏哥做的時候有個領(lǐng)紅包的活動頁面) try : closeBtn =driver.find_element_by_id( ' com.baidu.BaiduMap:id/guide_close ' ) except NoSuchElementException: pass else : closeBtn.click() #定義縮小函數(shù) 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() #執(zhí)行 #定義放大函數(shù) 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() #執(zhí)行 #主函數(shù)調(diào)用子函數(shù) #__name = ’__main__’表示執(zhí)行當前py文件;否則當前文件屬于調(diào)用模塊 if __name__ == ' __main__ ' : for i in range( 3 ): #執(zhí)行縮小函數(shù)3次,range( 3 )代表執(zhí)行0, 1 ,2共3次 pinch() for i in range( 3 ): #執(zhí)行放大函數(shù)3次,range( 3 )代表執(zhí)行0, 1 ,2共3次 zoom()
小結(jié)
? 好了,時間不早了,關(guān)于多點觸控宏哥就簡單的介紹到這里,大家晚安!!!
您的肯定就是我進步的動力。
如果你感覺還不錯,就請鼓勵一下吧!記得點波?
推薦
?哦!!!(點擊右邊的小球即可!?:))
? ? ? ?個人公眾號? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 微信群 ?(微信群已滿100,可以加宏哥的微信拉你進群,請備注:進群)? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
