appium自動化測試(二)
一. 獲取應用包名和入口activity
獲取應用包名和入口activity:aapt命令
aapt目錄:
安卓sdk的build-tools目錄下(如果要在cmd裏直接運行,要配置環境變量,否則需要在aapt所在目錄下打開cmd)
示例:
adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W
命令語法:
aapt dump badging apk安裝包名
示例:
aapt dump badging D:\Python全棧自動化\python_工具\appium+模擬器\Future-release-2018.apk
搜索launchable-activity,得到的是啟動頁面的Activity
部分代碼
#啟動頁兩種方式 desired_caps["appActivity"] = ".activity.addition.WelcomeActivity" desired_caps["appActivity"] = "com.xxzb.fenwoo.activity.addition.WelcomeActivity"
實際效果
二. Hybird & Webview
Hybird混合應用程序,在應用程序中嵌入了webview,通過webview訪問網頁
webview是一個基於webkit引擎,展現web頁面的控件
作用:
-
顯示和渲染web界面
-
直接使用html文件(網絡或apk資源包assets)作布局
-
可和javascript交互調用
三. Native APP
傳統的原生APP開發模式,Android基於Java語言,底層調用Google提供的API,IOS基於Objective C或者Swift,底層調用Apple官方提供的API
tips:
1. 在手機/模擬器中點擊關於手機中的版本號5下,出來開發者選項
2. 在開發者選項中勾選上顯示布局邊界
3. 如果是html的界面,那界面不會有布局邊界顯示,如有則說明是native的界面
四. Android布局類型
五. 常見控件
- TextView
文本控件,展示文本/文字
- EditText
可編輯輸入框,用於接收用戶輸入的數據
- Button
按鈕,用戶通過點擊Button觸發一系列的事件
- CheckBox
復選/多選按鈕
- ImageView
圖片控件,用於顯示圖片
- ProgressBar
加載進度條,表示正在加載一些數據
六. 控件屬性
- index
索引
- text
文本描述,新版本需要使用:findElementByAndroidUIAutomator("new UiSelector().text(\"師資團隊\")")
- resource-id
控件/布局界限
[480 1179] 描述控件/布局的起始坐標:X, Y軸
[720 1280] 描述控件/布局的終止坐標:X, Y軸
附錄:
七. appium-app頁面元素定位
1. 通過id定位元素:resource-id
2. 通過text定位(已舍棄)
3. 通過ClassName定位:classname
4. 通過AccessibilityId定位:content-desc
5. 通過AndroidUiAutomator定位
6. 通過xpath定位
#resource-id定位 driver.find_element_by_id("com.xxzb.fenwoo:id/layout_borrow_money") #classname定位 driver.find_element_by_class_name("android.widget.RelativeLayout") #content-desc定位 driver.find_element_by_accessibility_id("") #uiautomator(所有屬性都支持)定位 driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("com.xxzb.fenwoo:id/layout_item3")‘) #xpath定位 driver.find_element_by_xpath(‘//android.widget.TextView[@text=\"借款期限\"]‘)
xpath, id, class, accessibility id, -android uiautomator
八. UI Automator
UI自動化測試框架,安卓移動端app
要求:Android 4.3以上
-
提供了一系列API:執行UI測試在系統或者第三方app上面
-
允許在被測設備上執行操作,比如打開系統設置菜單
-
適合編寫黑盒自動化測試
UI Automator框架的主要特點:
1. 元素定位:UI Automator Viewer 掃描、分析待測應用的UI組件的圖像工具
2. 元素操作:Accessing device state 在目標設備和app上的各種操作
3. 元素識別:UI Automator APIs 在多個應用程序中捕獲和操作UI組件
九. UI Automator Viewer
元素識別工具:UI Automator Viewer
在安卓的SDK下的tools目錄中
十. UI Automators APIs
UiObject類:安卓組件對象
對象有許多模擬實際操作手機的方法和屬性,比如:文本的編輯、手勢操作等
類似web自動化中,元素對象(webelement),有點擊、輸入操作等
UiSelector類:
通過組件的各種屬性與節點關系定位組件
調用方法:new UiSelector().resourceId("")
new UiSelector().className(\"android.widget.LinearLayout\").resourceId(\"com.xxzb.fenwoo:id/layout_item3\")
因為函數的返回值就是實例化對象本身,那麽它可以不斷的調用很多方法
UiDevice類:提供了一系列方法和屬性來模擬在手機上的實際操作(更高一級,類似於document或者window)
獲取設備信息:屏幕分辨率、選裝狀態、亮滅屏......
操作:按鍵、坐標操作、滑動、拖拽、截圖......
十一. AndroidUiAutomator定位(在java中雙引號才表示字符串,因此定位表達式必須是雙引號)
使用UiAutomator中的UiSelector類來處理元素定位
在python客戶端appium庫中通過,uiautomator來獲取元素的方法為:driver.find_element_by_android_uiautomator()
該方法的參數為UiSelector類定位元素的表達式:new UiSelector().函數名稱("定位表達式")
new UiSelector().函數名稱("定位表達式")
實例化一個UiSelector對象,然後通過實例調用接口
示例:
driver.find_element_by_android_uiautomator(‘new UiSelector().resourceId("com.xxzb.fenwoo:id/btn_login")‘)
十二. 實例
from appium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.mobileby import MobileBy #由你來主動告訴appium server,我要操作哪個設備上的哪個app #Desired Capabilities——鍵值名。鍵名都是已經定義好的 #操作對象的信息準備 desired_caps = {} #操作系統——目標機 desired_caps["platformName"] = "Android" #系統版本 desired_caps["platformVersion"] = "5.1.1" #設備名字 desired_caps["deviceName"] = "Android Emulator" #app信息 #包名 desired_caps["appPackage"] = "com.xxzb.fenwoo" #首頁 desired_caps["appActivity"] = ".activity.MainActivity" #連接appium server,並告訴其要操作的對象 driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘, desired_caps) #等待 WebDriverWait(driver, 30, 1).until(EC.visibility_of_element_located((MobileBy.ID, "com.xxzb.fenwoo:id/btn_login"))) #點擊登錄註冊按鈕 driver.find_element_by_id("com.xxzb.fenwoo:id/btn_login").click() #等待 WebDriverWait(driver, 30, 1).until(EC.visibility_of_element_located((MobileBy.ID, "com.xxzb.fenwoo:id/et_phone"))) #輸入用戶名 driver.find_element_by_id("com.xxzb.fenwoo:id/et_phone").send_keys("18684720553") #下一步 driver.find_element_by_id("com.xxzb.fenwoo:id/btn_next_step").click()
十三. appium功能介紹
appium自動化測試(二)