Appium之獲取app資訊及介面定位方法

  • 2019 年 10 月 11 日
  • 筆記

一、獲取APP的package(包名)和activity

在使用android自動化測試工具monkeyrunner和appium中啟動應用時,需要填寫被測程式的包名和啟動的Activity,以下有幾種查看應用包名package和入口activity名稱的方法:

1.使用aapt//aapt是sdk自帶的一個工具,在sdkbuilds-tools目錄下

>以手機淘寶APK為例,CMD切換到aapt.exe目錄執行:aapt dump badging D:workappiumshoujitaobao_174.apk (放置手機淘寶APK的位置)

>運行後的結果中以下兩行分別是應用包名package和入口activity名稱

package: name=』com.taobao.taobao』

package

launchable-activity: name=』com.taobao.tao.welcome.Welcome』

activity

註:在android sdk目錄搜索可以找到aapt.exe,如果沒有可以下載apktool。

2.各種許可權都開啟,使用sdk/tools目錄下hierarchyviewer.bat 工具可以獲得(可以查看對應的app的activity)

hierarchyviewer

3.通過在CMD窗口中執行adb logcat -v time -s ActivityManager查看對應的欄位

在CMD窗口中執行adb logcat -v time -s ActivityManager,然後在模擬器或者手機中點擊應用進入,如點擊系統設置,進入後會有相應的日誌資訊列印出來,在資訊中查找 cmp=com.android.settings/.Settings

二、SDK-tools元素定位工具

1.adroid-sdk的安裝目錄tools下有1個自帶的工具uiautomatorviewer,打開後,如下所示:

uiautomatorviewer元素定位

UI定位介面

2.首先在模擬器或者真機上打開APP軟體,進入主介面,然後點擊uiautomatorviewer軟體左上角的手機圖標,如下圖

UI工具連接APP

得到的介面如下,選中元素即可看到元素的layout資訊,比如下方的定位框即可以通過ID來定位,也可以通過Xpath來定位

UI工具定位APP

三、appium自帶的Inspector元素定位工具

Appium Inspector 是 appium 自帶的一個元素定位工具。appium Inspector 的 winddows 版本不太好用,但是 Mac 上的功能還是很強大的,一般mac 上用的比較多。

1.設置appium的Android Settings,點擊左上角的Android圖標進入Android設置,注意設置時不要開啟appium,也就是不要點擊appium右上角的「三角形」按鍵

Android Settings

說明:

a)Application是對應的應用,用Path的話不管你有沒有這個應用,都是重新安裝一遍,所以這裡直接用了應用的包名和activity;

b)Launch AVD是將要定位的機器,這裡選的是模擬器;

2.開啟appium,點擊右側的launch(三角形圖標按鍵)開啟,然後點擊appium上的inspector來進行定位,使用inspector上的refresh可以刷新成當前模擬器的頁面(如果當前沒有開開任何的Android模擬器,點擊refresh時,他會根據要Android settings中的launch device打開一個模擬器)

設置apk路徑並開啟appium

Ispector Window

3.可能出現的異常

在使用Ispector過程中,你會發現經常會報以下這個錯誤,每次啟動都會給你手機上重新安裝一次應用,並且不能用滑鼠指定某個元素,沒有uiautomatorviewer使用方便。這裡建議大家使用uiautomatorviewer的定位方式

Ispector異常介面

四、元素定位方法

1.格式:find_element_by_定位方式(value)

通過id定位:driver.find_element_by_id("xxx")

通過class_name定位:driver.find_element_by_class_name("android.widget.RelativeLayout")

通過xpath定位:driver.find_element_by_xpath("//android.widget.LinearLayout[1]/android.widget.XXX")

通過name定位:driver.find_element_by_name()

通過text定位:driver.find_elements_by_android_uiautomator("new UiSelector().text("+關注")")

其他定位方法見請參考【每天1990】的部落格,感謝分享