前一段時(shí)間了解到有那么一個(gè)自動(dòng)化測(cè)試框架,名叫ATX,是由網(wǎng)易大佬@codeskyblue的團(tuán)隊(duì)研發(fā)的。
經(jīng)過(guò)一段時(shí)間的學(xué)習(xí),在此我總結(jié)一下ATX的優(yōu)缺點(diǎn)。
優(yōu)點(diǎn):
1.環(huán)境搭建簡(jiǎn)單
2.運(yùn)行速度比Appium略快
3.易上手,如果學(xué)習(xí)過(guò)其它自動(dòng)化框架就能在很短的時(shí)間內(nèi)學(xué)會(huì)ATX,即便是第一次學(xué)習(xí)這類(lèi)框架也會(huì)感受到世界是如此美好
缺點(diǎn):
1.暫時(shí)還沒(méi)感受到明顯的缺點(diǎn)
歡迎加入ATX qq群499563266
本文不對(duì)ATX安裝做贅述,如果需要安裝教程請(qǐng)另行搜索,本文更專(zhuān)注于ATX在工作中的實(shí)際應(yīng)用。
事前準(zhǔn)備:
mac一臺(tái)(由于ios系統(tǒng)的封閉性,所以想做ios自動(dòng)化必備mac電腦)
ios手機(jī)一臺(tái)
python3+環(huán)境
ATX環(huán)境
App選擇:
由于是網(wǎng)易的框架,所以在這里我選擇網(wǎng)易的app“網(wǎng)易云課堂”做演示(當(dāng)然其它公司的app也是可以用的),不要問(wèn)我為什么不選擇網(wǎng)易云音樂(lè)。
本系列文章預(yù)計(jì)分成三篇
第一篇:登錄網(wǎng)易云課堂
第二篇:更改學(xué)習(xí)興趣,搜索課程并標(biāo)記為想學(xué),觀看課程
第三篇:套用單元測(cè)試框架,生成測(cè)試報(bào)告
ok,閑扯了這么多,現(xiàn)在正式開(kāi)始第一篇,登錄網(wǎng)易云課堂,首先在你的手機(jī)上安裝好app,其次給它打個(gè)評(píng)價(jià)(以防跑腳本的時(shí)候冷不丁跳出來(lái)求好評(píng),那就涼涼了),再然后確定wda的代理已經(jīng)運(yùn)行在你的手機(jī)上,最后把手機(jī)端口映射到電腦上。(以上這些是安裝ATX會(huì)涉及的內(nèi)容,所以本文一句話帶過(guò)了)
本篇內(nèi)容主要分為兩部分
1.打開(kāi)app
2.登錄帳號(hào)
1.打開(kāi)app
我們先來(lái)看一個(gè)demo,看一下打開(kāi)一個(gè)app最簡(jiǎn)單的方法
import wda
client= wda.Client('http://localhost:8100')
client.healthcheck()
session= client.session('包名')
代碼非常簡(jiǎn)單,僅需短短四行就可以實(shí)現(xiàn)打開(kāi)app,每一個(gè)app都有包名,那么我們?cè)撛趺传@得包名呢?
在命令行輸入命令:ideviceinstaller -l

可以獲得當(dāng)前手機(jī)上所有已安裝的app的包名,是不是很簡(jiǎn)單
我們可以快速得到網(wǎng)易云課堂的包名為:com.netease.study901iphone
然后把上面的demo的session= client.session('包名')替換為
session= client.session('com.netease.study901iphone')就行了
運(yùn)行文件,看看是不是成功打開(kāi)了app,由于后面沒(méi)有加延遲,所以打開(kāi)后會(huì)立馬關(guān)閉,不要感到詫異,這是正常的!?。?/p>
2.登錄帳號(hào)
接著我們要進(jìn)入登錄界面(目前在首頁(yè)),那就是先點(diǎn)擊"賬號(hào)"頁(yè)面,然后點(diǎn)擊"登錄/注冊(cè)"(或者你想點(diǎn)擊"我的學(xué)習(xí)",然后點(diǎn)擊"登錄",也是一樣的),本來(lái)打算把進(jìn)入app的廣告頁(yè)面(就是右上角是"跳過(guò)"按鈕的那個(gè)頁(yè)面)直接跳過(guò)的,不過(guò)廣告頁(yè)面顯示挺短的,一兩秒就過(guò)了,就不專(zhuān)門(mén)做處理了,如果你有興趣的話可以寫(xiě)一下。
根據(jù)wda自帶的inspector我們可以獲取到元素的屬性,如圖

我們要做的就是點(diǎn)擊"帳號(hào)"一下,然后點(diǎn)擊"登錄/注冊(cè)"一下
我們可以看到"帳號(hào)"這個(gè)元素的name為帳號(hào),同理可得"登錄/注冊(cè)"元素的name為元素/注冊(cè),但是在這里提醒一下大家,不要想當(dāng)然以為name就是元素的名字,盡量用inspector確認(rèn)一下元素的屬性再使用
直接上代碼
session(name='帳號(hào)').tap()
session(name='登錄/注冊(cè)').tap()
粘貼到前面已經(jīng)成功打開(kāi)app的代碼后面
運(yùn)行一下試試~
不出意外報(bào)錯(cuò)了,沒(méi)有發(fā)現(xiàn)"登錄/注冊(cè)"這一元素,再看一下app當(dāng)前所在的頁(yè)面,你會(huì)發(fā)現(xiàn)還停留在首頁(yè),那可以推斷出帳號(hào)這個(gè)點(diǎn)擊操作沒(méi)有成功執(zhí)行,為什么呢?
忽然想到,打開(kāi)app后的廣告頁(yè),會(huì)不會(huì)內(nèi)頁(yè)已經(jīng)加載完成(但被廣告頁(yè)遮擋),帳號(hào)的點(diǎn)擊操作實(shí)際點(diǎn)擊到了廣告頁(yè)面上了呢?
有一個(gè)想法了,那怎么讓點(diǎn)擊操作不落在廣告頁(yè)面上,visible屬性了解一下
session(name='帳號(hào)',visible=True).tap()
這句比上面多了visible=True,實(shí)際作用就是當(dāng)name為帳號(hào)的元素可見(jiàn)時(shí)再點(diǎn)擊
ok,那我們?cè)僭囋嚒?/p>
是不是成功進(jìn)入了登錄界面!
然后我們選擇手機(jī)號(hào)登錄的方法,然后還要輸入帳號(hào),密碼,最后點(diǎn)擊登錄
理想的話應(yīng)該就是四個(gè)操作,如下
session(name='手機(jī)號(hào)登錄').tap()
# 輸入帳號(hào)
session(className='TextField').set_text('你的帳號(hào)')
# 輸入密碼
session(className='SecureTextField').set_text('你的密碼')
# session(value='請(qǐng)輸入手機(jī)號(hào)').set_text('你的帳號(hào)')
# session(value='請(qǐng)輸入6-16密碼').set_text('你的密碼')
# 點(diǎn)擊登錄
session(name='登 錄').tap()

由于帳號(hào)輸入框和密碼輸入框沒(méi)有name,所以這里我沒(méi)有采用name的定位方式,而是className的定位方式,另外還多寫(xiě)了一種用value定位的方式(已注釋的兩行),有興趣的同學(xué)可以試試。
我們把上面這段代碼拷到之前的代碼后面,并將你的帳號(hào)和密碼填充上去,運(yùn)行一下,
艸,又報(bào)錯(cuò)了!
"Keyboard is not present"
鍵盤(pán)不存在,其實(shí)就是鍵盤(pán)沒(méi)有調(diào)出來(lái)
真不是我故意搞你,我一開(kāi)始也是這么想的,但是不知道為啥,鍵盤(pán)沒(méi)有調(diào)出來(lái)(這里還希望知道的大佬們能說(shuō)一下原因)
既然不存在,那就把它搞出來(lái),set_text方法不行,那我就用tap方法,我點(diǎn)擊帳號(hào)輸入框,總會(huì)調(diào)出鍵盤(pán)的,所以在"手機(jī)號(hào)登錄"那一句后面再加一句
session(className='TextField').tap()
我們?cè)僭囍\(yùn)行一下,這次百分之一百成功了!
我們成功登錄到了帳號(hào)頁(yè)面有木有~
由于本人沒(méi)用git,所以完整代碼保存到百度云上了,感興趣的同學(xué)請(qǐng)到下面的鏈接下載,會(huì)有更詳細(xì)的注釋。
鏈接: https://pan.baidu.com/s/11F_Ab6t7SnOzXCo4JbHlzQ 密碼: 2uu5
那我們下一篇再見(jiàn)吧,bye~
感謝閱讀,歡迎轉(zhuǎn)載。
如有錯(cuò)誤請(qǐng)及時(shí)指出,謝謝!
如有問(wèn)題請(qǐng)留言,我懂的必然會(huì)回復(fù)!
共勉。