1. 程式人生 > >python自動化測試應用-第4篇(APP測試)--Appium進階篇

python自動化測試應用-第4篇(APP測試)--Appium進階篇

篇4                安卓app自動化測試-Appium API進階

                                                                             --lamecho辣麼醜

1.1概要

      大家好! 我是lamecho(辣麼醜),今天是《安卓app自動化測試》的第四篇,可以說是使用appium的進階,本篇不去糾結如何去找介面元素(不明白的同學移步到我的上一篇學習)而是主要根據手機app的特性,介紹有關的操作方法,比如如何鎖屏如何在鎖屏後點亮螢幕並做手勢解鎖等等類似的操作實現。

1.2 appium玩轉安卓手機

      智慧手機發展到今天,形成了一整套有關手勢操作的操作習慣,如手指左右上下滑動,及雙指縮放,還有手指的滑動解鎖,搖晃手機等動作。那麼我們怎麼在python中利用appium實現這些複雜的動作呢?接下來我將對大家感興趣的一些操作,一步步認識我們強大的Appium。

       1.螢幕滑動—swipe

      還記得我們在使用今日頭條的實戰中,切換熱點標籤是通過點選動作實現的吧。當然我們平時在使用手機時最多的還是利用android系統的特點,一般是通過手指的左右滑動螢幕來實現切換的。那麼我們來看看指令碼中是如何寫的。

……

w=driver.get_window_size()['width']

h=driver.get_window_size()['height']

driver.swipe(int(w*0.25),int(h*0.5),int(w*0.75),int(h*0.5),1000)

sleep(2)

driver.swipe(int(w*0.5),int(h*0.75),int(w*0.5),int(h*0.25) ,1000)

      大家應該直到螢幕的滑動分為四種,上劃,下劃,左劃和右劃。所以我們在利用swipe方法時通過變化裡邊的引數值來實現。首先我們看看swipe方法的API文件介紹

Swipe from one point to another point, for an optional duration.

    :Args:

     - start_x - x-coordinate at which to start

     - start_y - y-coordinate at which to start

     - end_x - x-coordinate at which to stop

     - end_y - y-coordinate at which to stop

     - duration - (optional) time to take the swipe, in ms.

    :Usage:

        driver.swipe(100, 100, 100, 400,1000)

swipe方法包含5個引數,起始點的座標,終點的座標及移動的時長。而這裡我們確定座標不採用絕對值,而是通過螢幕的相對值座標位置去操作滑動,這樣的好處就是不需要考慮不同解析度帶來的影響,讓你的指令碼在不同解析度的手機上都可以順利執行。所以這裡我們先通過get_window_size()方法獲取到當前手機的長,寬,然後再通過長寬上的不同比例來實現兩個點的定位。driver.swipe(int(w*0.25),int(h*0.5),int(w*0.75),int(h*0.5),1000)實現的是螢幕的左劃;driver.swipe(int(w*0.5),int(h*0.75),int(w*0.5),int(h*0.25) ,1000)實現的是螢幕的上劃操作。大家可以把指令碼加到我們的今日頭條的demo指令碼中,去看看實現效果,左劃一次做頁面的切換,上劃瀏覽今日頭條下面的文章。這裡注意我們的左後一個引數時間,當我們的時間設定的很短,帶來的效果是對應我們滑動的速率很快,拿上划來說你將瀏覽更多的文章。具體的效果大家可以自行體驗一下。

       2.螢幕點選—tap

       driver.tap()方法是模擬手指多點點選的,即我們常說的多點觸控。我們拿兩點觸控來說就是兩根手指點選螢幕

       driver.tap([(398,1864),(703,1852),],3000)

我們將其加到程式碼中,實現這兩個座標點的同時點選3秒。這裡要介紹一下,如何快速的檢視到當前螢幕的座標,在手機的設定-開發者選項中有一個“顯示觸控位置”和“顯示指標位置”的選項,開啟即可看到螢幕的最上方就會顯示座標了。另外多點觸控最多支援5個點位的同時點選。

       3. pinch和zoom縮放

      這兩個方法pinch是實現螢幕上元素的縮小,常用於圖片的縮小;那麼zoom就是元素的放大了。

       pinch(self, element=None, percent=200, steps=50)

zoom(self, element=None, percent=200, steps=50)

比如找到我們要進行縮放的元素element,縮放比例percent200就是2倍的比率,steps是步長。比如我們在進入頭條點開一個圖片後,對圖片進行放大操作

       els=driver.find_elements_by_class_name('android.widget.ImageView')

sleep(3)

driver.zoom(els[0],200,50)

       4.鎖屏及手勢解鎖

      在模擬手勢解鎖螢幕上,我們需要匯入appium的TouchAction模組其實這個模組的功用類似selenium裡的ActionChain,用法也都類似。在使用TouchAction時我們可以在一行的語句中實現連續的動作執行,思考一下手勢解鎖的操作流程:點選第一個位置然後移動到第二個位置,再移動到第三個位置,以此類推最後手指移開。那麼大家看看這樣一些的動作我們使用TouchAction怎麼來完成。

TouchAction(driver).press(x=159,y=749).move_to(x=206,y=0).move_to(x=206,y=0).move_to(x=0,y=201).move_to(x=0,y=201).release().perform()

這裡需要注意的一點是,在move_to裡填寫的必須是相對座標。好了,解鎖會了,那怎麼使用螢幕鎖屏呢?這個就很簡單了執行

driver.lock(3)

driver.keyevent(26)

第一行就是我們的鎖屏命令,裡邊的引數標識鎖屏時間,不過實際執行中並沒有起到時間的作用。第二行這裡大家也要注意一下,它是keyevent表示我們執行一些手機鍵盤指令動作,26表示的是電源鍵。具體還有哪些,大家自行搜尋網上有很多,我就不在這裡列出來了。

這樣的動作就是鎖屏然後操作電源鍵點亮螢幕,接下來就是執行我們的解鎖動作就可以了。

5.拖拽—drag_and_drop

這個動作也很好理解,比如在qq訊息中當接收到新訊息後在訊息列表右邊會出現一個表示訊息數的小圓圈,我們手指拖動它後會將其取消掉。那麼這樣的操作在appium裡怎麼實現呢?那就用到drag_and_drop方法了,我們看看具體的指令碼,由於今日頭條沒有這樣的操作,我就在qq中去執行了,指令碼如下:

els_title=driver.find_elements_by_id('icon')

els_unmsg=driver.find_elements_by_id('unreadmsg')

       driver.drag_and_drop(els_unmsg[0],els_title[0])

找到我們要拖拽的元素els_unmsg,然後拖拽到另一個元素els_title位置,這樣就實現了這個動作。大家可以在qq的app裡演示一下。

       6.搖一搖—shake

      搖晃手機,高大上了有沒有。但是很遺憾的是這個方法appium還沒有實現,執行會報錯。還有很多方法我就不在文章裡一一介紹了,我只是撿了幾個比較重要,大家遇到問題最多的的幾個命令來做講解。

好了,我們的《app自動化測試第四篇- Appium API進階》也要結束了。希望大家把文章中涉及的方法自己都去找個APP實現一下,這樣加深理解。在寫app自動化測試的系列的空擋中我同時寫了兩篇關於python介面測試的文章《book-python-auto-test-番外篇--介面》希望大家關注學習。最後感謝大家耐心讀完本篇文章,我是lamecho,辣麼醜。

我的微訊號搜尋 “ fire-bug ”。