寫在前面
本文講述的是【如何給動(dòng)態(tài)生成的控件添加id】涛目,像那種直接在xml配置id的高級(jí)操作秸谢,我是介紹不來(lái)的,請(qǐng)見諒霹肝。不需要前戲的朋友估蹄,請(qǐng)直接查看第四點(diǎn)
一、背景
自從公司使用【appium】做自動(dòng)化測(cè)試以后沫换,別提測(cè)試組的同事有多高興了臭蚁,給人一種【媽媽再也不用擔(dān)心我按壞公司的設(shè)備,賠不起錢了】的既視感讯赏。(ps:公司的設(shè)備是以 W 為單位的)
1垮兑、簡(jiǎn)單介紹自動(dòng)化測(cè)試
【appium】簡(jiǎn)單來(lái)說(shuō)就是一個(gè)自動(dòng)化測(cè)試的工具,和其他自動(dòng)化測(cè)試工具操作流程一致:
(1)根據(jù)控件id或者text等屬性來(lái)定位到控件
(2)然后模擬觸發(fā)一些點(diǎn)擊漱挎,滑動(dòng)等事件
(3)根據(jù)預(yù)期的結(jié)果和實(shí)際的結(jié)果做比較甥角,得出結(jié)論
二、翻車現(xiàn)場(chǎng)
在了解了自動(dòng)化測(cè)試的基本流程后识樱,就知道自動(dòng)化測(cè)試前題是【定位到具體的控件】嗤无,因此我需要給所有的控件【添加對(duì)應(yīng)的id】。在一頓猛如虎的操作后怜庸,排查了所有沒帶id的控件后当犯,我把打包好apk(沒問題.apk)給測(cè)試組同事做測(cè)試,并說(shuō)道【可以了割疾,有問題過(guò)來(lái)找我嚎卫,不過(guò)應(yīng)該沒什么問題的】。
····陷入摸魚狀態(tài)中,無(wú)法自拔····
【老哥拓诸,你的這個(gè)控件沒有id呢】猛的把我從魚塘中拉回來(lái)侵佃,心里碎碎念道“我那才吃過(guò)一口的老干媽怎么還沒人購(gòu)買,這還是99新的呢”奠支。
【不應(yīng)該啊馋辈,我剛剛都排查了一遍,我看看】倍谜。又是一波瘋狂輸出后迈螟,納尼,居然是[onClick]的鍋尔崔,原來(lái)是某些[Button]答毫,當(dāng)初設(shè)置點(diǎn)擊事件時(shí),采用的【在xml文件添加onClick屬性的方法季春,怪不得沒有id洗搂,我還能在界面上點(diǎn)擊】
【問題不大,馬上就好】于是我又排查了一遍帶onClick的button后载弄,把第二個(gè)apk(絕對(duì)沒問題.apk)發(fā)了他蚕脏,并寫到【這次改完后絕對(duì)沒問題了,有問題你也別來(lái)找我了侦锯,我去找你吧】
····我那喝過(guò)一口的冰闊樂怎么還沒人買驼鞭,才0.5元啊,咸魚真不好做····
“咳咳咳..電腦OA傳來(lái)一陣通知聲音”尺碰,是剛剛的測(cè)試同事發(fā)來(lái)的信息【過(guò)來(lái)】
挣棕??亲桥?洛心??L馀瘛4噬怼!7丁7ㄑ稀!
就兩個(gè)字葫笼,什么時(shí)候測(cè)試的朋友也這么大架子了I钇 !B沸恰K萁帧!
不就平時(shí)寫的bug有點(diǎn)多,讓你們跟著加班十幾次而已3饰簟;拥取!堤尾!
起身過(guò)去肝劲,手上默默拿起“50cm長(zhǎng)的戒尺”(這把尺子說(shuō)來(lái)話長(zhǎng),不為人知的1cm哀峻,一把辛酸淚涡相,有機(jī)會(huì)再描述)
我:【請(qǐng)問有什么問題哲泊?】(你們以為我會(huì)態(tài)度不好剩蟀,不可能的,我是經(jīng)過(guò)專業(yè)素養(yǎng)培訓(xùn)的切威,一般都會(huì)禮貌待人育特,不會(huì)爆粗,除非真的忍不紫入)
測(cè)試:【這里有一排的按鈕沒有id】
我:【一排缰冤?不可能吧,我看看】
測(cè)試:【把界面截圖喳魏,以及對(duì)應(yīng)的控件詳細(xì)屬性界面顯示給我看】
我:【我c棉浸,真的沒有,還是一排刺彩。那這個(gè)應(yīng)該是列表控件迷郑,列表控件的每一個(gè)item都是沒有id的,這是正常的】
測(cè)試:【不是吧创倔,最外層這個(gè)是LinearLayout嗡害,又不是RecyclerView或者ListView,你別坑我】
我:【我c畦攘,現(xiàn)在的測(cè)試霸妹,對(duì)android基礎(chǔ)知識(shí)掌握這么熟的嗎?是想搶飯碗嗎知押?心里是這么想著叹螟,嘴上只能說(shuō)者‘額,那我回去看看吧’】
三台盯、分析處理問題
1首妖、缺少id的原因
放下戒尺,乖乖地去到指定界面的xml布局爷恳,查看有缆,發(fā)現(xiàn)真的是LinearLayouer,但是并沒有看到里面有嵌套什么Button,textView,ImageView之類的控件。然后跳轉(zhuǎn)到指定.java文件棚壁,發(fā)現(xiàn)是通過(guò)new Button(context)杯矩,然后addView到LinearLayout上面的,我滴乖乖
2袖外、解決缺少id的問題
(1)我想將這些動(dòng)態(tài)添加的button史隆,通過(guò)xml布局的方式,移動(dòng)到LinearLayout的標(biāo)簽下面曼验,并且給這些button添加id泌射。但想法是好的,現(xiàn)實(shí)是殘忍的鬓照,項(xiàng)目中之所以用動(dòng)態(tài)添加的方式熔酷,就是因?yàn)椤?strong>這些按鈕是需要根據(jù)xml配置文件進(jìn)行配置的,說(shuō)白了豺裆,就是這些按鈕是根據(jù)xml的不同拒秘,動(dòng)態(tài)變化的】(ps:通過(guò)xml配置,動(dòng)態(tài)生成按鈕的思路臭猜,下次有機(jī)會(huì)再解釋)
(2)既然無(wú)法通過(guò)xml布局文件的方式來(lái)處理躺酒,就只能給每個(gè)按鈕動(dòng)態(tài)添加id了。通過(guò)api文檔蔑歌,發(fā)現(xiàn)有一個(gè)setId的方法羹应,里面?zhèn)魅胍粋€(gè)int類型的參數(shù),但是這個(gè)id從哪里來(lái)呢次屠,隨便輸入1.2,3,4嗎园匹?好像隨意了點(diǎn)。根據(jù)平時(shí)的用法帅矗,id都是R.id.xxx這種形式的偎肃,并以此類推R.color.xxx,R.string.xxx浑此,R.drawable.xxx等累颂,得到以下三部曲(這個(gè)三部曲是不是來(lái)的有點(diǎn)容易了?凛俱?)
四紊馏、簡(jiǎn)單三部曲
1、單獨(dú)創(chuàng)建id類型的資源文件
2朱监、自定義id值
3、使用自定義的id值
需要注意的是原叮,第一點(diǎn)不是必須的赫编。自定義的id值巡蘸,你可以定義在string.xml,或者是color.xml 文件中擂送。我之所以單獨(dú)創(chuàng)建ids.xml文件悦荒,僅僅是為了資源分類合理,養(yǎng)成良好的編碼習(xí)慣嘹吨,不被同事噴搬味,不被上司懟,賞心悅目等等等等蟀拷。
五碰纬、結(jié)束語(yǔ)
我把最后打包的apk(有問題你砍我.apk)發(fā)給了測(cè)試同事,并順道留下一句話【給我往死里測(cè)】问芬,然后默默把OA悦析,QQ,微信下線了愈诚。
下班鐘聲響起她按,【這一天牛隅,終究是愉悅的炕柔,我的努力也得到了回報(bào),我的老干媽和冰闊樂順利被一個(gè)摳腳大漢給回收了媒佣,感謝X袄邸!默伍!】
至于測(cè)試還有沒有問題欢嘿,那是明天的事了,再見R埠A侗摹!