1. 程式人生 > >Android + Appium 自動化測試完整的環境配置及代碼詳解

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

完成 通知 文件的 lam tails contain version 自動化測試 開發

環境的的搭建

參考大神博客: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裏面的東西是否也可以定位?搜了一波,發現有兩方法理論上可行,但我感覺還是有點局限吧,這裏不展開了,大家可以自行百度。

###################


#coding=UTF-8
‘‘‘
Create on 2018-4-16
python 2.7 for mac
@author: 張剛強

https://www.cnblogs.com/tangdongchu/p/4432808.html

vi ~/.bash_profile
export ANDROID_HOME=/Users/zgq/Library/Android/sdk
adb devices
adb shell ps|grep baoxian
1. adb shell
2. dumpsys activity | grep mFocusedActivity

/Users/zgq/Library/Android/sdk/tools

sudo sh /Users/zgq/Library/Android/sdk/tools/bin/uiautomatorviewer ##啟動uiautomator view程序

apk--bxd_6.2.4_online_624_3_sign.apk
/Users/zgq/PycharmProjects/appium_android/com.test/bxd_6.2.4_online_624_3_sign.apk
adb install XXX.apk

通過反編譯來獲取包名及入口
cd /Users/zgq/Library/Android/sdk/
aapt dump badging c:\software\taobao.apk
aapt dump badging

appium 啟動--127.0.0.1--4723
‘‘‘
import os
import unittest
from selenium import webdriver
from appium import webdriver
import time

#Appium環境配置
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)

class DpAppTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps[‘platformName‘] = ‘Android‘ #設置平臺
desired_caps[‘platformVersion‘] = ‘6.0‘ #系統版本
desired_caps[‘deviceName‘] = ‘7L9PQKCEUKSO6HBY‘ #設備id
desired_caps[‘autoLaunch‘] = ‘true‘ #是否自動啟動
desired_caps[‘app‘] = PATH(
‘/Users/zgq/PycharmProjects/appium_android/com.test/bxd_6.2.4_online_624_3_sign.apk‘ #安裝包路徑,放在該py文件的目錄下
)
desired_caps[‘appPackage‘] = ‘com.jiuyang.baoxian‘ #包名 com.jiuyang.baoxian
desired_caps[‘appActivity‘] = ‘com.jiuyang.baoxian.activity.MainActivity‘ #啟動的activity com.jiuyang.baoxian/.activity.MainActivity

# com.jiuyang.baoxian/.activity.WelcomeActivity
#Original error: Activity used to start app doesn‘t exist or cannot be launched! Make sure it exists and is a launchable activity

#與appium-server通信的協議
self.driver = webdriver.Remote(‘http://localhost:4723/wd/hub‘, desired_caps)

def tearDown(self):
self.driver.quit() #case執行完退出

def test_dpApp(self): #需要執行的case
time.sleep(15)
#com.jiuyang.baoxian:id/name 在線咨詢 android.widget.TextView
el = self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘在線咨詢‘)]") #通過xpath找到定位框
#el = self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘上海‘)]") #通過xpath找到定位框
el.click() #點擊定位框
time.sleep(5)

#android.widget.EditText com.jiuyang.baoxian:id/login_phone_et

#self.driver.find_element_by_id("com.jiuyang.baoxian:id/login_phone_et").click()
#InputBox = self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text,‘請輸入您的手機號碼‘)]") #通過xpath找到定位框
#InputBox = self.driver.find_element_by_xpath("//android.widget.EditText[contains(@text,‘輸入手機號碼‘)]") #通過xpath找到定位框
#InputBox = self.driver.find_element_by_id("com.jiuyang.baoxian:id/login_phone_et")
#InputBox.click() # 點擊定位框
time.sleep(2)

#InputBox.send_keys("18103835542")
time.sleep(2)


if __name__ == ‘__main__‘:
suite = unittest.TestLoader().loadTestsFromTestCase(DpAppTests)
unittest.TextTestRunner(verbosity=2).run(suite) #執行case集

###########################
---------------------
作者:s清風s
來源:CSDN
原文:https://blog.csdn.net/u010381752/article/details/81874273
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

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