【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】AWS Device Farm介紹及Appium踩過(guò)的坑_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】AWS Device Farm介紹及Appium踩過(guò)的坑_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】AWS Device Farm介紹及Appium踩過(guò)的坑_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】AWS Device Farm介紹及Appium踩過(guò)的坑_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】AWSDeviceFarm介紹及Appium踩過(guò)的坑

本文記錄了在AWSDeviceFarm上進(jìn)行AppiumTestNG進(jìn)行手機(jī)應(yīng)用UI自動(dòng)化測(cè)試的流程及遇到的問(wèn)題,及具體的解決方法。同時(shí)記錄了使得測(cè)試腳本更穩(wěn)定的一些代碼寫(xiě)法。

DeviceFarm是AmazonWebService推出的云應(yīng)用測(cè)試工具,允許你在數(shù)量眾多的物理移動(dòng)設(shè)備上測(cè)試你的應(yīng)用。DF提供了兩項(xiàng)功能。其中RemoteAccess允許你通過(guò)網(wǎng)頁(yè)遠(yuǎn)程操控云端的設(shè)備,并可上傳安裝自己的應(yīng)用。另外AutomatedTests還允許你上傳自己的自動(dòng)化測(cè)試腳本,在云端的設(shè)備上執(zhí)行自動(dòng)化測(cè)試。

DF支持多種UI測(cè)試框架如:AppiumJavaJUnit,AppiumJavaTestNG,AppiumPython,Calabash等。經(jīng)過(guò)與JUnit的對(duì)比,最終我選擇了AppiumJavaTestNG。

類(lèi)似的平臺(tái)有XamarinTestCloud以及國(guó)內(nèi)騰訊的WeTest上的云真機(jī)。DeviceFarm使用步驟:1、本地設(shè)備上測(cè)試通過(guò)你的測(cè)試腳本2、將腳本按照官方教程使用Maven方法打包成zip文檔3、上傳zip以及ipa/apk,選定設(shè)備池,執(zhí)行測(cè)試4、等待執(zhí)行完成,分析執(zhí)行結(jié)果,修正直到全部通過(guò)備注:

唯一的麻煩是使用官方特定的Maven打包方式,可以直接github下官網(wǎng)的Demo,復(fù)制到自己的項(xiàng)目。踩過(guò)的坑:autoAcceptAlerts和autoDismissAlerts在XCUITest中被棄用了,對(duì)話(huà)框需要代碼中處理。android:Validlocatorstrategiesforthisrequest:xpath,id,classname,accessibilityid,-androiduiautomatorios:Validlocatorstrategiesforthisrequest:xpath,id,name,classname,-iospredicatestring,-iosclasschain,accessibilityidIOS必須指定bundleId、UDID、deviceNameAndroid雖說(shuō)deviceName沒(méi)有意義,但不指定編譯不通過(guò)IOSDriver中沒(méi)有AndroidDriver的許多方法,例如:pressKeyCode();對(duì)于不能獲取焦點(diǎn)的EditText,IOS中也能使用sendKey()來(lái)輸入文本,而Android只能使用driver.pressKeyCode(),向設(shè)備發(fā)送鍵值的方式。對(duì)于一個(gè)列表而言:IOS會(huì)把看不見(jiàn)的未顯示到當(dāng)前屏幕的元素也找出來(lái),這個(gè)時(shí)候需要使用isDisplay來(lái)判斷是否可見(jiàn)。因?yàn)椴豢梢?jiàn)意味著不可點(diǎn)擊。而Android初步測(cè)試不會(huì)把看不見(jiàn)的列表元素找出來(lái)。driver.swipe(start_x,start_y,end_x,end_y,duration);這里的end_x,end_y實(shí)踐證明就是目的坐標(biāo),論壇上許多人說(shuō)是偏移量,版本不對(duì)嗎?有的時(shí)候findElement找不到的時(shí)候,使用findElements獲得數(shù)組,并使用對(duì)應(yīng)的下標(biāo),常??梢哉业?。特別是對(duì)付對(duì)話(huà)框里的元素appium沒(méi)有提供直接判斷是否找到元素的方法,可以用findElement方法是否拋出NoSuchElementException來(lái)判斷,或者判斷findElements返回?cái)?shù)組的size是否為零。對(duì)于滾動(dòng)查找列表項(xiàng)的操作,會(huì)發(fā)生目標(biāo)項(xiàng)只有部分顯示就被找到的情況。這個(gè)時(shí)候如果你需要偏移坐標(biāo)查找如CheckBox之類(lèi)的元素,有可能發(fā)生偏移后的坐標(biāo)超出屏幕的情況。此時(shí)相應(yīng)方向的坐標(biāo)需要防止越界??梢栽谡业胶笤倩瑒?dòng)一次屏幕,以保證目標(biāo)完全顯示。click操作也是如此,因?yàn)閏lick默認(rèn)是tap元素的中心坐標(biāo),而元素的中心坐標(biāo)可能尚未顯示。Appium支持中文:在Capabilities中添加capabilities.setCapabilities("unicodeKeyboard",true);capabilities.setCapabilities("resetKeyboard",true);//必須在設(shè)置上面兩個(gè)屬性后,如果腳本中途崩潰,容易出現(xiàn)系統(tǒng)輸入法被替換為Appium輸入法的問(wèn)題,該輸入法是沒(méi)有界面的。錯(cuò)誤:xcodebuildfailedwithcode65解決:將WebDriverAgentRunner安裝到iphone上。方法如下1、使用AppiumInspector建立Session成功,會(huì)自動(dòng)安裝2、運(yùn)行測(cè)試代碼建立Session成功,會(huì)自動(dòng)安裝3、使用Xcode或xcodebuilder將WebDriverAgent直接安裝到設(shè)備上4、以上都不行,則到WebDriverAgent的github官網(wǎng)下載最新的替代現(xiàn)有的UI自動(dòng)化測(cè)試具有不穩(wěn)定性,任何微小的延遲或界面不同于預(yù)期,腳本就會(huì)失敗。要寫(xiě)出在多種機(jī)型上正確運(yùn)行的腳本,需要不少時(shí)間,如果你要結(jié)合云測(cè)試平臺(tái)進(jìn)行云端設(shè)備的自動(dòng)化測(cè)試,不穩(wěn)定性會(huì)更高。所以設(shè)定合理的等待時(shí)間,在可能出現(xiàn)彈框的地方進(jìn)行判斷。AWSDeviceFarm注意:AWS官網(wǎng)的文檔很可能不是最新的,比如:官網(wǎng)最新支持appium1.6.3,Github上最新支持appium1.6.5。官網(wǎng)說(shuō)明項(xiàng)目需要修改POM.xml文件,Github上直接給出詳細(xì)步驟,對(duì)于詳細(xì)技術(shù)文檔,Github才是王道,官網(wǎng)更新常常不及時(shí)。DeviceFarm會(huì)把所有的JUnitTestCase轉(zhuǎn)換成TestNGTestCase。但官方說(shuō)不會(huì)有影響。實(shí)際上對(duì)于注解的支持就不一樣了,例如JUnit中的@BeforeClasss在被轉(zhuǎn)換成TestNG后是否會(huì)相當(dāng)于TestNG的@BeforeClass,并且JUnit要求@BeforeClass方法必須是Publicstatic修飾,而TestNG并無(wú)這樣的限制。所以還是改用TestNG吧,免得疑神疑鬼,況且需要改的也只是注解和稍微調(diào)整邏輯而已。DeviceFarm(Appium1.6.5)已經(jīng)可以重寫(xiě)DesiredCapabilities覆蓋服務(wù)器。例如添加:NoReset=true。官方例子中明確寫(xiě)出DesiredCapabilities必須為空,信息不同步,那指的是1.4.3版本的appium。(不能重寫(xiě)的信息來(lái)自Github官方例子,可以重寫(xiě)的信息來(lái)自stackoverflow的官方工程師答疑)DeviceFarm上IOS使用driver.manage().window().getSize().getWidth();在執(zhí)行g(shù)etSize()的經(jīng)常時(shí)候返回null,Android沒(méi)有這個(gè)問(wèn)題,有時(shí)候需要用固定數(shù)值。同樣在執(zhí)行element.getLocation()時(shí)也是經(jīng)常直接崩潰。后來(lái)又莫名奇妙好了,這么不穩(wěn)定,測(cè)試個(gè)球。AWS默認(rèn)每個(gè)用例執(zhí)行后都會(huì)resetApp。也就是清空所有狀態(tài)。所以如果你的app需要登錄,則每個(gè)用例執(zhí)行前都需要重新登錄一遍,方法一:可以把Login的邏輯放在JUnit的@Before或TestNG的@BeforeMethod方法里。方法二:設(shè)置DesiredCapabilities的NoReset設(shè)為true,讓其不要在會(huì)話(huà)前重置應(yīng)用狀態(tài)理論上本地使用Appium相同版本測(cè)試通過(guò)的代碼,放到DeviceFarm上是不應(yīng)該有問(wèn)題的,現(xiàn)實(shí)卻不是這樣。DeviceFarm上提供了多種記錄:Vedio、AppiumJavaOutput、AppiumServerOutput、Logcat等。答案只能在這里找了。遠(yuǎn)程調(diào)試遠(yuǎn)比本地調(diào)試麻煩的多,網(wǎng)絡(luò)的限制,實(shí)時(shí)性的限制等。遠(yuǎn)程調(diào)試一次花費(fèi)的時(shí)間遠(yuǎn)比本地調(diào)試來(lái)的長(zhǎng)。并且只能通過(guò)返回的日志信息查找問(wèn)題。千奇百怪的手機(jī),就有千奇百怪的彈框,還有兩個(gè)平臺(tái)的適配,耐心方得始終。DeviceFarm需要借助Maven將項(xiàng)目打包成指定格式的zip格式,如果官網(wǎng)看不明白,直接上github下載官方Demo,參照它的代碼結(jié)構(gòu)寫(xiě)即可。主要是一個(gè)pom.xml和zip.xml。官方Demo使用PageObject的結(jié)構(gòu)組織代碼,可以了解一下:/SeleniumHQ/selenium/wiki/PageObjectsDeviceFarm允許一次測(cè)試選擇多部設(shè)備,并且是并行執(zhí)行測(cè)試,如果你的腳本包含了測(cè)試登錄功能,那么很可能出現(xiàn)一個(gè)賬號(hào)在多臺(tái)設(shè)備間相互踢出再登錄的情況。這時(shí)候只能一次選一臺(tái)設(shè)備單獨(dú)執(zhí)行,除非能在登錄時(shí)判斷不同設(shè)備登錄不同賬號(hào)。惱人的系統(tǒng)對(duì)話(huà)框做機(jī)型適配時(shí),最麻煩的就是系統(tǒng)對(duì)話(huà)框了,不同系統(tǒng)版本,不同廠商的權(quán)限對(duì)話(huà)框出現(xiàn)時(shí)機(jī)可能不同,可能多個(gè)權(quán)限對(duì)應(yīng)一個(gè)對(duì)話(huà)框,也可能多個(gè)權(quán)限對(duì)應(yīng)多個(gè)對(duì)話(huà)框。還有偶爾出現(xiàn)的其他app的對(duì)話(huà)框,這個(gè)沒(méi)轍。例如googleservice被登出,iTune賬號(hào)在其他平臺(tái)登錄被提出,IOS推送服務(wù)PushNotification失敗,千奇百怪,寫(xiě)代碼有什么難的,適配才難。保證對(duì)話(huà)框位置固定后再查找元素:對(duì)話(huà)框查找元素時(shí)使用的id,最好是包含包名的如:id/button1。使用button1容易找不著。彈出對(duì)話(huà)框時(shí),需要注意findElement操作執(zhí)行之前對(duì)話(huà)框是否顯示到位(動(dòng)畫(huà)效果完成),動(dòng)畫(huà)執(zhí)行過(guò)程中findElement獲取Element的坐標(biāo)不是最終的坐標(biāo)。所以會(huì)出現(xiàn),findElement可以找到,click等交互操作沒(méi)反應(yīng)的情況。同樣需要注意在對(duì)話(huà)框顯示之前等待一定時(shí)長(zhǎng)保證軟鍵盤(pán)完全消失。如果發(fā)現(xiàn)查找對(duì)話(huà)框元素時(shí),同時(shí)查找到了對(duì)話(huà)框下onStop狀態(tài)的元素,則可能是使用findElements找數(shù)組元素時(shí),在該元素還是onResume狀

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論