Android + Appium 自動化測試完整的環境配置及程式碼詳解

s清風s發表於2018-08-20

環境的的搭建

參考大神部落格:https://www.cnblogs.com/fnng/p/4540731.html

該部落格有一套詳細的入門教程,奈何時間有點久遠有些東西不能用了,但是參考價值還是有滴。

1.安裝各種SDK

jre必須1.8以上  AndroidSDK需要8.0以下的測試,8.0我測試還不行,環境變數如下圖所示

 

 

 

 

 

 

 

 

 

 

 

 

 

Android的sdk怎麼裝我就懶得說了,基本安卓開發的電腦上都有了,安裝參考傳送門:http://www.testclass.net/appium/appium-base-sdk/

2.安裝node.js

官網地址:https://nodejs.org/en/

官網也說了,8.11.4LTS相對用的人最多,開發追求的是穩定,所以我下載了這個版本

如果你不會安裝可以找你們公司的H5開發工程師,vue.js 跟 react.js 這些流行的前端框架都有用node

裝完成後的校驗:cmd 輸入npm回車 

3.appiumForWindows 安裝

下載地址:https://pan.baidu.com/s/1x8iA_tDCNwLIpOEUQ6BodQ   密碼: 94ig

或者看傳送門:http://www.testclass.net/appium/appium-base-server/

安裝,完成後啟動長這樣:

安裝完成後設定下環境變數,把appium的目錄設定進去

然後檢測安裝是否成功:

特別說明下:只要檢測不成功就是少了環境變數,一個一個檢查對照一下很快就能弄好了

環境變數依次是:ANDROID_HOME   JAVA_HOME   ADB  Emulator   需要說明的是ADB跟Emulator都在android_sdk中,Emulator是安卓模擬器,也需要把它所在的目錄設定為環境變數:

設定好這些,檢測通過了,那麼恭喜你Appium測試的環境算是搭建完成了。

建立模擬器

其實費力去安裝Android-sdk還不如安裝一個Android studio 各種工具齊全,sdk也可以想下什麼下什麼,模擬器建立也很方便

這裡我建立了兩5.1的模擬器

需要說明的是:只有模擬器才會支援X86 正常情況下,應用市場的apk都不會去支援x86的,主要是為了減少apk包的大小【至於為啥會減少,你問你們安卓開發去】,那麼我想用微信這個apk來測試就不能用x86的模擬器了,所以我建立了arm的模擬器

arm核心的模擬器才可以安裝一般世面上的apk,這個時候我就把微信這apk給裝進去了。

這裡我遇到一個問題:我的模擬器網速那真TM慢,網上搜了一波,發現是DNS的問題【如果你也是這樣,可以跟我一樣啟動模擬器】傳送門:https://blog.csdn.net/z860368871/article/details/73285978/

模擬器的名字我shan上面的截圖有了,例如:Tommy5 Tommy55 Tommy8  這些就是模擬器名稱,啟動的時候需要用命令啟動模擬器,如果你網速正常,請跳過這段,正常啟動模擬器即可。

定位控制元件

採用 uiautomatorviewer 定位控制元件,它是android-sdk自帶的東西

如果你開啟不了,說明你的jre還不是1.8,請設定好你的jre環境變數,必須是1.8

到此,控制元件就能正常定位了,你也可以參考傳送門:http://www.testclass.net/appium/appium-base-find-element/

編寫測試指令碼程式碼

這裡我用的是java語言哈

原始碼下載地址:https://download.csdn.net/download/u010381752/10615814

首先下載兩jar包,我原始碼裡面有了 java-client 跟 selenium-server-standalone 這兩jar就是用於測試的主要工具了

啟動Appium-server

程式碼編寫使用的是 idea 2018,這東西網上一大把破解方法,自行那啥,推薦使用這東西畢竟是牌子貨。

【如果真不會裝,請找到你們公司的java後臺開發,他們用的就是這東西】

配置說明:

此外,我簡單封裝了一個工具類,方便使用,寫有註釋,看一眼就能明白,這裡不羅嗦了

右鍵,啟動看下demo效果你應該就能明白了

下面獻上 appium 測試使用的API:

模擬操作類

  • driver.runAppInBackground(5); //將當前活躍的應用放在後臺執行
  • driver.hideKeyboard(); //隱藏鍵盤
  • driver.lockDevice(); //鎖屏
  • driver.openNotifications(); //開啟Android的下拉通知欄
  • driver.isAppInstalled(“com.example.android.apis”) //判斷應用是否安裝
  • driver.installApp(“path/to/my.apk”) //安裝應用
  • driver.removeApp(“com.example.android.apis”) //解除安裝應用
  • driver.closeApp() //關閉App
  • driver.getContextHandles() //可用上下文,context可以理解為可進入的視窗,如果是native則為native_app,如果是webview為對應webview;
  • driver.context(); //設定上下文 (context),對hybrid app會用到
  • driver.getAppStringMap(); //獲取應用的字串
  • driver.pressKeyCode(AndroidKeyCode.HOME); //給裝置傳送一個按鍵事件,所有鍵盤按鍵值可參考AndroidKeyCode類
  • driver.pullFile(“Library/AddressBook/AddressBook.sqlitedb”); //從裝置中拉出檔案
  • driver.pullFolder(“Library/AddressBook”); //從裝置中拉出資料夾
  • driver.PushFile(“/data/local/tmp/file.txt”, “some data for the file”); //推送檔案到裝置中去
  • driver.swipe(75, 500, 75, 0, 0.8) //模擬使用者滑動
  • driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1)); //設定等待時間
  • driver.navigate().forward(); // 前進
  • driver.navigate().back(); // 後退
  • driver.navigate().refresh(); // 重新整理
  • driver.currentActivity(); //當前activity,可用於斷言跳轉是否正確
  • driver.startActivity(appPackage,appActivity); //啟動其他app的activity
  • 座標操作,降低適配帶來的不適用: 
    double Screen_X = driver.Manage().Window.Size.Width;//獲取手機螢幕寬度 
    double Screen_Y = driver.Manage().Window.Size.Height;//獲取手機螢幕高度 
    double startX = element.Location.X; //獲取元素的起點座標,即元素最左上角點的橫座標 
    double startY = element.Location.Y; //獲取元素的起點座標,即元素最左上角點的縱座標 
    double elementWidth = element.Size.Width; //獲取元素的寬度 
    double elementHight = element.Size.Height; //獲取元素的寬度

傳送門:https://blog.csdn.net/mmk1992/article/details/56016528

經測試上面這些方法,有些不支援高版本了,比如說滑動就不支援了swipe

這裡還有一個遺留問題:H5-WebView裡面的東西是否也可以定位?搜了一波,發現有兩方法理論上可行,但我感覺還是有點侷限吧,這裡不展開了,大家可以自行百度。

 

相關文章