本文將分享Android相關基礎知識和Android APP控制元件定位工具的使用方法,
Android基礎知識
Android布局
Android是通過容器的布局屬性來管理子控制元件的位置關系(iOS去掉了布局的概念,直接用變數之間的相對關系完成位置的計算),把界面上所有的控制元件根據他們的間距的大小,擺放在正確的位置,布局是一種可用于放置很多控制元件的容器,通過多層布局嵌套完成一些比較復雜的界面,
Android布局有LinearLayout(線性布局)、RelativeLayout(相對布局)、FrameLayout(幀布局)、AbsoluteLayout(絕對布局)、TableLayout(表格布局)、Grid layout(網格布局)、ConstraintLayout(約束布局)等,布局的內部除了放置控制元件外,也可以放置布局,通過多層布局的嵌套,我們就能夠完成一些比較復雜的界面,

Android四大組件
Android四大基本組件分別是Activity,Service服務,Content Provider內容提供者,Broadcast Receiver廣播接收器,
1、activity
- 與用戶互動的可視化界面
- 一個Activity通常就是一個單獨的螢屏(視窗)
- Activity之間通過Intent進行通信
2、Service
- service 實作后臺運行程式,在后臺完成用戶指定的操作
- 通常用于為其他組件提供后臺服務或監控其他組件的運行狀態,
3、Content Provider
- content provider 內容提供者,提供程式所需要的資料
- 只有需要在多個應用程式間共享資料才需要內容提供者,是不同應用程式間共享資料的唯一方式,
4、Broadcast Receiver
- 監聽外部事件的到來(比如來電)
Android控制元件
常用的控制元件:
-
TextView(文本控制元件),EditText(可編輯文本控制元件)
-
Button(按鈕),imageButton(圖片按鈕),ToggIeButton(開關按鈕)
-
Image View(圖片控制元件)
-
CheckBox(復選框控制元件), RadioButton(單選框控制元件)
元素定位實際上就是定位控制元件,Android應用的層級結構使用xml撰寫,xml全名叫可擴展標記語言,類似于HTML,可以看作一個微型的資料庫,android系統里安裝的每一個app,其資訊都被存到一個xml里,
xml定義了節點和屬性,每個控制元件都有它的屬性(resourceid, xpath, aid),沒有css屬性(樣式檔案和布局xml檔案是分開的),
Android中提供了三種決議XML的方式:DOM(Document Object Model)、SAX(Simple API XML)以及Pull決議方式,DOM決議器在決議XML檔案時,會把檔案中的所有元素按照其出現的層次關系,決議成一個個Node物件(節點),形成Dom樹,DOM允許用戶遍歷檔案樹,訪問父節點、子節點或者兄弟節點,每個節點具有特定的屬性:
- clickable
- content-desc
- resource-id
- text
- bounds
- …
App控制元件定位
對App控制元件的定位其實就是節點和屬性的定位,Android App推薦使用uiautomatorviewer工具進行定位,它是 sdk路徑下的一個工具,也可以用Appium inspector工具來定位,
uiautomatorviewer定位
電腦通過無線或者USB連接到手機設備后(或者連接到模擬機),雙擊uiautomatorviewer.bat打開uiautomatorviewer工具,

點擊左上角第二個或者第三個圖示獲取當前手機APP頁面,在右邊可以看到app的xml結構樹,可以獲取到每個節點的詳細屬性,

Appium inspector工具
打開appium,點擊【啟動服務器】

點擊右上角搜索標志圖示【Start Inspector Session】

編輯Desired Capabilities

Capability設定:
- platformName:Android或者iOS
- deviceName:設備名,127.0.0.1:7555是網易mumu模擬器,開啟后需要使用adb命令
adb connect 127.0.0.1:7555連接, - appPackage:包名
- appActivity:Activity名字
- platformVersion:系統版本
- automationName:默認使用 uiautomator2(andorid默認使用 uiautomator2,ios默認使用 XCUITest)
- noReset:是否在測驗前后重置相關環境(例如首次打開彈框,或者是登錄資訊)
- unicodeKeyBoard:是否需要輸入非英文之外的語言并在測驗完成后重置輸入法
- dontStopAppOnReset:首次啟動的時候,不停止app(可以除錯或者運行的時候提升運行速度)
- skipDeviceInitialization:跳過安裝,權限設定等操作(可以除錯或者運行的時候提升運行速度)
其他更多引數參考官方檔案:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
主要設定好前面6個引數后,點擊右下角【Start Session】,可以獲取到每個節點的詳細屬性,

用例錄制
appium desktop可以錄制用例,并生成測驗代碼
點擊上方眼睛圖示,開始錄制,手動點擊左邊app元素,右邊顯示了三種元素操作方法:Tap、Send Keys、Clear,選擇對應的操作

完成后測驗步驟后,點擊停止錄制,右上角可以看到生成的自動化代碼,可以選擇Java,Python等語言,

獲取到app頁面元素屬性值后就可以使用appium來進行定位,實作對app的操作,下一篇文章將介紹appium元素定位方法,
Python + Appium啟動APP
APP自動化測驗關鍵步驟包括:
- 匯入依賴:
from appium import webdriver - capabilities設定
- 初始化 driver
webdriver.remote('http://127.0.0.1:4723/wd/hub', desired_caps) - 元素定位與操作
- 斷言 assert
下面代碼實作打開雪球APP,點擊輸入框,輸入”京東“,然后退出,
#!/usr/bin/python3
# -*-coding:utf-8-*-
from appium import webdriver
desired_caps = {}
# desired_caps['recreateChromeDriverSessions'] = True
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1.1'
desired_caps['deviceName'] = '127.0.0.1:7555'
desired_caps['appPackage'] = 'com.xueqiu.android'
desired_caps['automationName'] = 'Uiautomator2'
desired_caps['appActivity'] = '.common.MainActivity'
desired_caps['newCommandTimeout'] = 3000
desired_caps['unicodeKeyboard'] = True
desired_caps['noReset'] = 'true'
desired_caps['dontStopAppOnReset'] = 'true'
desired_caps['skipDeviceInitialization'] = 'true'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.implicitly_wait(15)
driver.find_element_by_id("com.xueqiu.android:id/tv_search").click()
driver.find_element_by_id("com.xueqiu.android:id/search_input_text").send_keys("京東")
driver.quit()
文章標題:App控制元件定位
本文作者:hiyo
本文鏈接:https://blog.csdn.net/u010698107/article/details/111431111
歡迎關注公眾號:「測驗開發小記」及時接收最新技術文章!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/249092.html
標籤:其他
