前一段時間了解到有那么一個自動化測試框架,名叫ATX,是由網(wǎng)易大佬@codeskyblue的團隊研發(fā)的。
經(jīng)過一段時間的學習,在此我總結(jié)一下ATX的優(yōu)缺點。
優(yōu)點:
1.環(huán)境搭建簡單
2.運行速度比Appium略快
3.易上手,如果學習過其它自動化框架就能在很短的時間內(nèi)學會ATX,即便是第一次學習這類框架也會感受到世界是如此美好
缺點:
1.暫時還沒感受到明顯的缺點
歡迎加入ATX qq群499563266
本文不對ATX安裝做贅述,如果需要安裝教程請另行搜索,本文更專注于ATX在工作中的實際應用。
事前準備:
mac一臺(由于ios系統(tǒng)的封閉性,所以想做ios自動化必備mac電腦)
ios手機一臺
python3+環(huán)境
ATX環(huán)境
App選擇:
由于是網(wǎng)易的框架,所以在這里我選擇網(wǎng)易的app“網(wǎng)易云課堂”做演示(當然其它公司的app也是可以用的),不要問我為什么不選擇網(wǎng)易云音樂。
本系列文章預計分成三篇
第一篇:登錄網(wǎng)易云課堂
第二篇:更改學習興趣,搜索課程并標記為想學,觀看課程
第三篇:套用單元測試框架,生成測試報告
ok,閑扯了這么多,現(xiàn)在正式開始第一篇,登錄網(wǎng)易云課堂,首先在你的手機上安裝好app,其次給它打個評價(以防跑腳本的時候冷不丁跳出來求好評,那就涼涼了),再然后確定wda的代理已經(jīng)運行在你的手機上,最后把手機端口映射到電腦上。(以上這些是安裝ATX會涉及的內(nèi)容,所以本文一句話帶過了)
本篇內(nèi)容主要分為兩部分
1.打開app
2.登錄帳號
1.打開app
我們先來看一個demo,看一下打開一個app最簡單的方法
import wda
client= wda.Client('http://localhost:8100')
client.healthcheck()
session= client.session('包名')
代碼非常簡單,僅需短短四行就可以實現(xiàn)打開app,每一個app都有包名,那么我們該怎么獲得包名呢?
在命令行輸入命令:ideviceinstaller -l
可以獲得當前手機上所有已安裝的app的包名,是不是很簡單
我們可以快速得到網(wǎng)易云課堂的包名為:com.netease.study901iphone
然后把上面的demo的session= client.session('包名')替換為
session= client.session('com.netease.study901iphone')就行了
運行文件,看看是不是成功打開了app,由于后面沒有加延遲,所以打開后會立馬關閉,不要感到詫異,這是正常的!!!
2.登錄帳號
接著我們要進入登錄界面(目前在首頁),那就是先點擊"賬號"頁面,然后點擊"登錄/注冊"(或者你想點擊"我的學習",然后點擊"登錄",也是一樣的),本來打算把進入app的廣告頁面(就是右上角是"跳過"按鈕的那個頁面)直接跳過的,不過廣告頁面顯示挺短的,一兩秒就過了,就不專門做處理了,如果你有興趣的話可以寫一下。
根據(jù)wda自帶的inspector我們可以獲取到元素的屬性,如圖
我們要做的就是點擊"帳號"一下,然后點擊"登錄/注冊"一下
我們可以看到"帳號"這個元素的name為帳號,同理可得"登錄/注冊"元素的name為元素/注冊,但是在這里提醒一下大家,不要想當然以為name就是元素的名字,盡量用inspector確認一下元素的屬性再使用
直接上代碼
session(name='帳號').tap()
session(name='登錄/注冊').tap()
粘貼到前面已經(jīng)成功打開app的代碼后面
運行一下試試~
不出意外報錯了,沒有發(fā)現(xiàn)"登錄/注冊"這一元素,再看一下app當前所在的頁面,你會發(fā)現(xiàn)還停留在首頁,那可以推斷出帳號這個點擊操作沒有成功執(zhí)行,為什么呢?
忽然想到,打開app后的廣告頁,會不會內(nèi)頁已經(jīng)加載完成(但被廣告頁遮擋),帳號的點擊操作實際點擊到了廣告頁面上了呢?
有一個想法了,那怎么讓點擊操作不落在廣告頁面上,visible屬性了解一下
session(name='帳號',visible=True).tap()
這句比上面多了visible=True,實際作用就是當name為帳號的元素可見時再點擊
ok,那我們再試試~
是不是成功進入了登錄界面!
然后我們選擇手機號登錄的方法,然后還要輸入帳號,密碼,最后點擊登錄
理想的話應該就是四個操作,如下
session(name='手機號登錄').tap()
# 輸入帳號
session(className='TextField').set_text('你的帳號')
# 輸入密碼
session(className='SecureTextField').set_text('你的密碼')
# session(value='請輸入手機號').set_text('你的帳號')
# session(value='請輸入6-16密碼').set_text('你的密碼')
# 點擊登錄
session(name='登 錄').tap()
由于帳號輸入框和密碼輸入框沒有name,所以這里我沒有采用name的定位方式,而是className的定位方式,另外還多寫了一種用value定位的方式(已注釋的兩行),有興趣的同學可以試試。
我們把上面這段代碼拷到之前的代碼后面,并將你的帳號和密碼填充上去,運行一下,
艸,又報錯了!
"Keyboard is not present"
鍵盤不存在,其實就是鍵盤沒有調(diào)出來
真不是我故意搞你,我一開始也是這么想的,但是不知道為啥,鍵盤沒有調(diào)出來(這里還希望知道的大佬們能說一下原因)
既然不存在,那就把它搞出來,set_text方法不行,那我就用tap方法,我點擊帳號輸入框,總會調(diào)出鍵盤的,所以在"手機號登錄"那一句后面再加一句
session(className='TextField').tap()
我們再試著運行一下,這次百分之一百成功了!
我們成功登錄到了帳號頁面有木有~
由于本人沒用git,所以完整代碼保存到百度云上了,感興趣的同學請到下面的鏈接下載,會有更詳細的注釋。
鏈接: https://pan.baidu.com/s/11F_Ab6t7SnOzXCo4JbHlzQ 密碼: 2uu5
那我們下一篇再見吧,bye~
感謝閱讀,歡迎轉(zhuǎn)載。
如有錯誤請及時指出,謝謝!
如有問題請留言,我懂的必然會回復!
共勉。