ATX ui自動(dòng)化ios實(shí)戰(zhàn)(一)

前一段時(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我們可以獲取到元素的屬性,如圖

WebDriverAgent 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()

登錄頁(yè)面inspector

由于帳號(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ù)!

共勉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • 點(diǎn)擊查看原文 Web SDK 開(kāi)發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 14,401評(píng)論 0 15
  • 如果說(shuō)我會(huì)懷念一個(gè)地方,可能常常是因?yàn)槟抢镉兄芎贸缘氖澄?,就是在這個(gè)世界的許許多多的角落里,會(huì)懷念幾個(gè)小小的市鎮(zhèn)...
    蒼羽紗閱讀 332評(píng)論 0 1
  • 2018年6月20日 星期三 晴 前幾天女兒有些懶床,總是在我的催促下起床,于是我就很不耐煩的警告了她,請(qǐng)...
    知足常樂(lè)朵兒閱讀 233評(píng)論 0 0

友情鏈接更多精彩內(nèi)容