<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
其實在前面兩個章節的元素定位的場景,我們已經對 app 中的自動化操作已經略知一二。這裡我們發現, 實際上 appium 複用了 selenium 的很多很多的操作方式,所以像一些 “點選、輸入” 等操作,這種常規的操作的方式與在 WEB 自動化中的方式基本上是完全一致的,就不再進行贅述了。
唯一一個與 WEB 端不太一樣的地方就是關於 “滑動操控” ,所以 “頁面的滑動” 在實際操作手機過程中,也是最常使用的,只需要操控一個點在螢幕中拖動到另外一個點就可以了。這個 “滑” 的過程就是一個滑動的動作。
在 “appium” 中,對於 “滑動” 的操作也做了一些簡單的封裝,為其提供了方法,這就是 “swipe” 。
OK,接下來我們就看一些,滑動操控 的指令碼究竟要怎麼寫。
在模擬 “滑動操控” 的時候,使用的方法就是 swipe() ,該方法的引數說明如下:
ps:如果不設定 "duration" ,即為 0秒 ,無法看到滑動效果。
duration 引數需要注意的是:在移動裝置上滑動時間的快慢所形成的效果是不一樣的。以今日頭條APP首頁上滑為例,同樣的滑動距離,滑動較快則出現類似翻頁的效果,而滑動較慢則是同一則新聞從起始位置滑動到結束位置。
手機螢幕的座標:以手機螢幕最左上角的座標點為座標中心(0, 0),向右話滑動則縱座標不變,橫座標變大;向下滑動則橫座標不變,縱座標變大。
在實際工作場景中,不同測試機的螢幕尺寸存在著很大的差異性。所以正常情況下,我們不會選擇使用固定的的座標來滑動螢幕。
一般操作是,先獲取測試機螢幕尺寸,再通過獲取的手機螢幕尺寸來確定滑動的起始、結束座標;這樣,即使在我們更換了測試手機後也不需要重新更改座標。使用webdriver提供的get_window_size()方法可以獲取螢幕尺寸(即螢幕右下角的座標),方法如下:
# 獲取螢幕寬度 width = driver.get_window_size()['width'] # 獲取螢幕高度 height = driver.get_window_size()['heigth']
滑動螢幕操作程式碼如下:()
# 螢幕從下向上滑動 driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000) sleep(1) # 螢幕從上向下滑動 driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000) sleep(1) # 螢幕從左向右滑動 driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000) sleep(1) # 螢幕從右向左滑動 driver.swipe(width*0.9, height*0.5, width*0.1, height*0.5, 1000) sleep(1)
程式碼範例如下:
# coding=utf-8 from time import sleep from appium import webdriver # appium 的特色就是將安卓、IOS的底層封裝成了 webdriver 型別的語句 from appium.webdriver.common.appiumby import By # 啟動引數 desired_caps = {} # 定義 desired_caps 變數,用以賦值很多的啟動資訊 desired_caps['platformName'] = 'Android' # 裝置名稱、系統為 "Android" desired_caps['platformVersion'] = '7.1.2' # 這裡是在夜神模擬器的設定中心檢視安卓版本是 "7.1.2" ,後續會告訴大家如何切換版本 desired_caps['deviceName'] = '127.0.0.1:62001' # 這裡如果是真機的話填寫的是裝置名稱;因為我們用的是模擬器,填寫的是IP埠號 # desired_caps['appPackage'] = 'com.baidu.searchbox' # APP 的包名;這裡我們使用的是通訊錄 # desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity' # 啟動的介面的名字(也或者叫啟動名,預設是 "." 開頭的) # desired_caps['automationName']='UiAutomator1' # 宣告手機驅動 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 註冊到這個節點上,傳入 "desired_caps"。這個節點就是 "appium" 開啟的埠節點 sleep(1) # 獲取螢幕寬度 width = driver.get_window_size()['width'] # 獲取螢幕高度 height = driver.get_window_size()['height'] # 利用 "swipe" 實現滑動, 螢幕從下向上滑動 driver.swipe(width*0.5, height*0.9, width*0.5, height*0.1, 1000) sleep(1) # 利用 "swipe" 實現滑動, 螢幕從上向下滑動 driver.swipe(width*0.5, height*0.1, width*0.5, height*0.9, 1000) sleep(1) # 利用 "swipe" 實現滑動, 螢幕從左向右滑動 driver.swipe(width*0.1, height*0.5, width*0.9, height*0.5, 1000) sleep(1) # 利用 "swipe" 實現滑動, 螢幕從右向左滑動 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()
上文中的指令碼雖然也能夠實現我們針對 App 的 “滑動操控” 的操作,但是程式碼的整潔度上來看不是那麼的美觀。既然如此,我們是否能夠將其封裝起來,變成一個公共的方法,當然是可以的了,繼續往下看。
程式碼範例如下:
# coding=utf-8 from time import sleep from appium import webdriver # appium 的特色就是將安卓、IOS的底層封裝成了 webdriver 型別的語句 def getSize(driver): """獲取頁面大小""" x = driver.get_window_size()['width'] y = driver.get_window_size()['height'] return(x, y) def swipeRight(driver): """向右滑動 - [x軸變動,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): """向左滑動 - [x軸變動,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): """向下滑動 - [x軸不變,y軸變動]""" 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): """向上滑動 - [x軸不變,y軸變動]""" 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(): # 啟動引數 desired_caps = {} # 定義 desired_caps 變數,用以賦值很多的啟動資訊 desired_caps['platformName'] = 'Android' # 裝置名稱、系統為 "Android" desired_caps['platformVersion'] = '7.1.2' # 這裡是在夜神模擬器的設定中心檢視安卓版本是 "7.1.2" ,後續會告訴大家如何切換版本 desired_caps['deviceName'] = '127.0.0.1:62001' # 這裡如果是真機的話填寫的是裝置名稱;因為我們用的是模擬器,填寫的是IP埠號 # desired_caps['appPackage'] = 'com.baidu.searchbox' # APP 的包名;這裡我們使用的是通訊錄 # desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity' # 啟動的介面的名字(也或者叫啟動名,預設是 "." 開頭的) # desired_caps['automationName']='UiAutomator1' # 宣告手機驅動 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 註冊到這個節點上,傳入 "desired_caps"。這個節點就是 "appium" 開啟的埠節點 sleep(1) # 利用 "swipe" 實現滑動, 螢幕從下向上滑動 swipeDown(driver) sleep(2) # 利用 "swipe" 實現滑動, 螢幕從上向下滑動 swipeUp(driver) sleep(2) # 利用 "swipe" 實現滑動, 螢幕從左向右滑動 swipeLeft(driver) sleep(2) # 利用 "swipe" 實現滑動, 螢幕從右向左滑動 swipeRight(driver) sleep(2) driver.terminate_app('com.baidu.searchbox') # driver.quit() if __name__ == '__main__': swipeDemo()
其實滑動在實際操作中應用的場景還是不少的,就比如要定位的元素在頁面下方必須要通過滑動才能往下滑將其展示出來;再比如解鎖密碼、或者滑動九宮格之類的場景… 類似的滑動場景,大家可以在真實的場景中逐步的去體驗。
到此,一個很簡單的基於 “百度App” 實現的 demo 就到此結束了。但是該 demo 僅僅是基於實現,沒有像之前的 WEB 框架那樣去同意做處理、去進行 PO 模式的編寫。
到此這篇關於Python利用appium實現模擬手機滑動操控的操作的文章就介紹到這了,更多相關Python appium手機滑動操控內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45