appium自動化測試(二)

一. 獲取應用包名和入口activity

獲取應用包名和入口activity:aapt命令javascript

 

aapt目錄:html

安卓sdk的build-tools目錄下(若是要在cmd裏直接運行,要配置環境變量,不然須要在aapt所在目錄下打開cmd)java

示例:python

adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4Wandroid

 

命令語法:web

aapt dump badging apk安裝包名windows

示例:網絡

aapt dump badging D:\Python全棧自動化\python_工具\appium+模擬器\Future-release-2018.apkapp

搜索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

     控件資源的id,惟一,有的控件/佈局可能沒有

  • content-desc

     內容描述(爲殘疾人士設置的屬性,如使用talkback,會發出content-desc中描述信息聲音)

      findElementByAndroidUIAutomator('new UiSelector().description(\"個人檸檬\")')

  • bounds

      控件/佈局界限

    [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定位

 

id, class, accessibility id, -android uiautomator, 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=\"借款期限\"]')

 

八. 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功能介紹

相關文章
相關標籤/搜索