小編寫這篇文章的主要目的,是給大家進(jìn)行一個(gè)相關(guān)的講解,講解的內(nèi)容主要是利用Python appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)的操作,具體的一些操作方法,下面給大家做出一個(gè)解答。
其實(shí)在前面兩個(gè)章節(jié)的元素定位的場(chǎng)景,我們已經(jīng)對(duì)app中的自動(dòng)化操作已經(jīng)略知一二。這里我們發(fā)現(xiàn),實(shí)際上appium復(fù)用了selenium的很多很多的操作方式,所以像一些“點(diǎn)擊、輸入”等操作,這種常規(guī)的操作的方式與在WEB自動(dòng)化中的方式基本上是完全一致的,就不再進(jìn)行贅述了。
唯一一個(gè)與WEB端不太一樣的地方就是關(guān)于“滑動(dòng)操控”,所以“頁(yè)面的滑動(dòng)”在實(shí)際操作手機(jī)過(guò)程中,也是最常使用的,只需要操控一個(gè)點(diǎn)在屏幕中拖動(dòng)到另外一個(gè)點(diǎn)就可以了。這個(gè)“滑”的過(guò)程就是一個(gè)滑動(dòng)的動(dòng)作。
在“appium”中,對(duì)于“滑動(dòng)”的操作也做了一些簡(jiǎn)單的封裝,為其提供了方法,這就是“swipe”。
滑動(dòng)操控
OK,接下來(lái)我們就看一些,滑動(dòng)操控的腳本究竟要怎么寫。
在模擬“滑動(dòng)操控”的時(shí)候,使用的方法就是swipe(),該方法的參數(shù)說(shuō)明如下:
start_x:起始橫坐標(biāo)
start_y:起始縱坐標(biāo)
end_x:結(jié)束時(shí)橫坐標(biāo)
end_y:結(jié)束時(shí)縱坐標(biāo)
duration:滑動(dòng)持續(xù)時(shí)間,單位毫秒,默認(rèn)None(一般設(shè)置500-1000毫秒比較合適)
ps:如果不設(shè)置"duration",即為0秒,無(wú)法看到滑動(dòng)效果。
duration參數(shù)需要注意的是:在移動(dòng)設(shè)備上滑動(dòng)時(shí)間的快慢所形成的效果是不一樣的。以今日頭條APP首頁(yè)上滑為例,同樣的滑動(dòng)距離,滑動(dòng)較快則出現(xiàn)類似翻頁(yè)的效果,而滑動(dòng)較慢則是同一則新聞從起始位置滑動(dòng)到結(jié)束位置。
手機(jī)屏幕的坐標(biāo):以手機(jī)屏幕最左上角的坐標(biāo)點(diǎn)為坐標(biāo)中心(0,0),向右話滑動(dòng)則縱坐標(biāo)不變,橫坐標(biāo)變大;向下滑動(dòng)則橫坐標(biāo)不變,縱坐標(biāo)變大。
如何獲取設(shè)備屏幕坐標(biāo)系
在實(shí)際工作場(chǎng)景中,不同測(cè)試機(jī)的屏幕尺寸存在著很大的差異性。所以正常情況下,我們不會(huì)選擇使用固定的的坐標(biāo)來(lái)滑動(dòng)屏幕。
一般操作是,先獲取測(cè)試機(jī)屏幕尺寸,再通過(guò)獲取的手機(jī)屏幕尺寸來(lái)確定滑動(dòng)的起始、結(jié)束坐標(biāo);這樣,即使在我們更換了測(cè)試手機(jī)后也不需要重新更改坐標(biāo)。使用webdriver提供的get_window_size()方法可以獲取屏幕尺寸(即屏幕右下角的坐標(biāo)),方法如下:
#獲取屏幕寬度 width=driver.get_window_size()['width'] #獲取屏幕高度 height=driver.get_window_size()['heigth']
滑動(dòng)屏幕操作代碼如下:()
#屏幕從下向上滑動(dòng) driver.swipe(width*0.5,height*0.9,width*0.5,height*0.1,1000) sleep(1) #屏幕從上向下滑動(dòng) driver.swipe(width*0.5,height*0.1,width*0.5,height*0.9,1000) sleep(1) #屏幕從左向右滑動(dòng) driver.swipe(width*0.1,height*0.5,width*0.9,height*0.5,1000) sleep(1) #屏幕從右向左滑動(dòng) driver.swipe(width*0.9,height*0.5,width*0.1,height*0.5,1000) sleep(1)
模擬實(shí)現(xiàn)一個(gè)簡(jiǎn)單的滑動(dòng)操作
代碼示例如下:
#coding=utf-8 from time import sleep from appium import webdriver#appium的特色就是將安卓、IOS的底層封裝成了webdriver類型的語(yǔ)句 from appium.webdriver.common.appiumby import By #啟動(dòng)參數(shù) desired_caps={}#定義desired_caps變量,用以賦值很多的啟動(dòng)信息 desired_caps['platformName']='Android'#設(shè)備名稱、系統(tǒng)為"Android" desired_caps['platformVersion']='7.1.2'#這里是在夜神模擬器的設(shè)置中心查看安卓版本是"7.1.2",后續(xù)會(huì)告訴大家如何切換版本 desired_caps['deviceName']='127.0.0.1:62001'#這里如果是真機(jī)的話填寫的是設(shè)備名稱;因?yàn)槲覀冇玫氖悄M器,填寫的是IP端口號(hào) #desired_caps['appPackage']='com.baidu.searchbox'#APP的包名;這里我們使用的是通訊錄 #desired_caps['appActivity']='com.baidu.searchbox.SplashActivity'#啟動(dòng)的界面的名字(也或者叫啟動(dòng)名,默認(rèn)是"."開頭的) #desired_caps['automationName']='UiAutomator1'
#聲明手機(jī)驅(qū)動(dòng) driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)#注冊(cè)到這個(gè)節(jié)點(diǎn)上,傳入"desired_caps"。這個(gè)節(jié)點(diǎn)就是"appium"開啟的端口節(jié)點(diǎn) sleep(1) #獲取屏幕寬度 width=driver.get_window_size()['width'] #獲取屏幕高度 height=driver.get_window_size()['height'] #利用"swipe"實(shí)現(xiàn)滑動(dòng),屏幕從下向上滑動(dòng) driver.swipe(width*0.5,height*0.9,width*0.5,height*0.1,1000) sleep(1) #利用"swipe"實(shí)現(xiàn)滑動(dòng),屏幕從上向下滑動(dòng) driver.swipe(width*0.5,height*0.1,width*0.5,height*0.9,1000) sleep(1) #利用"swipe"實(shí)現(xiàn)滑動(dòng),屏幕從左向右滑動(dòng) driver.swipe(width*0.1,height*0.5,width*0.9,height*0.5,1000) sleep(1) #利用"swipe"實(shí)現(xiàn)滑動(dòng),屏幕從右向左滑動(dòng) driver.swipe(width*0.9,height*0.5,width*0.1,height*0.5,1000) sleep(1) driver.terminate_app('com.baidu.searchbox') #driver.quit()
將“滑動(dòng)操控”改為公共的方法
上文中的腳本雖然也能夠?qū)崿F(xiàn)我們針對(duì)App的“滑動(dòng)操控”的操作,但是代碼的整潔度上來(lái)看不是那么的美觀。既然如此,我們是否能夠?qū)⑵浞庋b起來(lái),變成一個(gè)公共的方法,當(dāng)然是可以的了,繼續(xù)往下看。
代碼示例如下:
#coding=utf-8 from time import sleep from appium import webdriver#appium的特色就是將安卓、IOS的底層封裝成了webdriver類型的語(yǔ)句 def getSize(driver): """獲取頁(yè)面大小""" x=driver.get_window_size()['width'] y=driver.get_window_size()['height'] return(x,y) def swipeRight(driver): """向右滑動(dòng)-[x軸變動(dòng),y軸不變]""" l=getSize(driver) x1=int(l[0]*0.8) x2=int(l[0]*0.2) y=int(l[1]*0.5) driver.swipe(x1,y,x2,y,1000) def swipeLeft(driver): """向左滑動(dòng)-[x軸變動(dòng),y軸不變]""" l=getSize(driver) x1=int(l[0]*0.9) x2=int(l[0]*0.1) y=int(l[1]*0.5) driver.swipe(x2,y,x1,y,1000) def swipeDown(driver): """向下滑動(dòng)-[x軸不變,y軸變動(dòng)]""" l=getSize(driver) y1=int(l[1]*0.9) y2=int(l[1]*0.1) x=int(l[0]*0.5) driver.swipe(x,y1,x,y2,1000) def swipeUp(driver): """向上滑動(dòng)-[x軸不變,y軸變動(dòng)]""" l=getSize(driver) y1=int(l[1]*0.8) y2=int(l[1]*0.2) x=int(l[0]*0.5) driver.swipe(x,y2,x,y1,1000) def swipeDemo():
#啟動(dòng)參數(shù) desired_caps={}#定義desired_caps變量,用以賦值很多的啟動(dòng)信息 desired_caps['platformName']='Android'#設(shè)備名稱、系統(tǒng)為"Android" desired_caps['platformVersion']='7.1.2'#這里是在夜神模擬器的設(shè)置中心查看安卓版本是"7.1.2",后續(xù)會(huì)告訴大家如何切換版本 desired_caps['deviceName']='127.0.0.1:62001'#這里如果是真機(jī)的話填寫的是設(shè)備名稱;因?yàn)槲覀冇玫氖悄M器,填寫的是IP端口號(hào) #desired_caps['appPackage']='com.baidu.searchbox'#APP的包名;這里我們使用的是通訊錄 #desired_caps['appActivity']='com.baidu.searchbox.SplashActivity'#啟動(dòng)的界面的名字(也或者叫啟動(dòng)名,默認(rèn)是"."開頭的) #desired_caps['automationName']='UiAutomator1' #聲明手機(jī)驅(qū)動(dòng) driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)#注冊(cè)到這個(gè)節(jié)點(diǎn)上,傳入"desired_caps"。這個(gè)節(jié)點(diǎn)就是"appium"開啟的端口節(jié)點(diǎn) sleep(1) #利用"swipe"實(shí)現(xiàn)滑動(dòng),屏幕從下向上滑動(dòng) swipeDown(driver) sleep(2) #利用"swipe"實(shí)現(xiàn)滑動(dòng),屏幕從上向下滑動(dòng) swipeUp(driver) sleep(2) #利用"swipe"實(shí)現(xiàn)滑動(dòng),屏幕從左向右滑動(dòng) swipeLeft(driver) sleep(2) #利用"swipe"實(shí)現(xiàn)滑動(dòng),屏幕從右向左滑動(dòng) swipeRight(driver) sleep(2) driver.terminate_app('com.baidu.searchbox') #driver.quit() if __name__=='__main__': swipeDemo()
其實(shí)滑動(dòng)在實(shí)際操作中應(yīng)用的場(chǎng)景還是不少的,就比如要定位的元素在頁(yè)面下方必須要通過(guò)滑動(dòng)才能往下滑將其展示出來(lái);再比如解鎖密碼、或者滑動(dòng)九宮格之類的場(chǎng)景…類似的滑動(dòng)場(chǎng)景,大家可以在真實(shí)的場(chǎng)景中逐步的去體驗(yàn)。
到此,一個(gè)很簡(jiǎn)單的基于“百度App”實(shí)現(xiàn)的demo就到此結(jié)束了。但是該demo僅僅是基于實(shí)現(xiàn),沒有像之前的WEB框架那樣去同意做處理、去進(jìn)行PO模式的編寫。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/128008.html
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:支持全平臺(tái)的安裝,我們直接從的里面安裝即可,鏈接為。平臺(tái)可以下載安裝包如,平臺(tái)可以下載安裝包如,平臺(tái)可以選擇下載源碼,但是更推薦用下文的安裝方式。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬取相關(guān)庫(kù)的安裝的安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬蟲框架的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---8、APP爬取相關(guān)庫(kù)的安裝:MitmProxy的安裝下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---10、爬蟲框架的安裝...
摘要:代碼運(yùn)行完成以后,微信被打開了。能不能像前面打開知乎一樣,使用這個(gè)屬性呢也行,也不行?;瑒?dòng)屏幕使用的命令為,滑動(dòng)屏幕需要使用坐標(biāo)信息。單獨(dú)使用控制手機(jī)在 想開發(fā)網(wǎng)頁(yè)爬蟲,發(fā)現(xiàn)被反爬了?想對(duì) App 抓包,發(fā)現(xiàn)數(shù)據(jù)被加密了?不要擔(dān)心,使用 Airtest 開發(fā) App 爬蟲,只要人眼能看到,你就能抓到,最快只需要2分鐘,兼容 Unity3D、Cocos2dx-*、Android 原生 A...
摘要:三性能測(cè)試工具官網(wǎng)介紹騰訊開源的的隨身調(diào)測(cè)平臺(tái),支持和。官網(wǎng)介紹騰訊游戲部門開發(fā)的移動(dòng)全平臺(tái)性能測(cè)試分析工具平臺(tái)。百度的服務(wù)目前主要為收費(fèi)服務(wù)。 隨著移動(dòng)互聯(lián)網(wǎng)的高速發(fā)展,App 應(yīng)用非?;穑瑴y(cè)試工程師也會(huì)接觸到各種 app 應(yīng)用。除了人工測(cè)試之外,也可以通過(guò)一些測(cè)試工具來(lái)提高我們的測(cè)試效率...
閱讀 1068·2023-01-14 11:38
閱讀 1064·2023-01-14 11:04
閱讀 906·2023-01-14 10:48
閱讀 2383·2023-01-14 10:34
閱讀 1151·2023-01-14 10:24
閱讀 1029·2023-01-14 10:18
閱讀 657·2023-01-14 10:09
閱讀 736·2023-01-14 10:02