版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第11章
認識移動app自動化測試工具-UIAutomator2CATALOGUE目錄11.1UIAutomator2環(huán)境搭建11.2
常見定位方式11.3常見API的使用方法11.4編譯運行方式11.1
UIAutomator2環(huán)境搭建11.1.1什么是UIAutomator2工作原理:UIAutomator2的核心工作原理基于AndroidUI框架的訪問和操作。它利用設(shè)備上的UI控件和屬性來定位和識別屏幕上的元素。開發(fā)者可以編寫測試腳本,使用UIAutomator2提供的API來模擬用戶操作,如點擊按鈕、輸入文本、滑動列表等。這些操作會被執(zhí)行,并且測試框架會捕獲應(yīng)用的反饋,比如UI的變化、事件的觸發(fā)、數(shù)據(jù)的加載等,以驗證應(yīng)用的行為是否符合預(yù)定的測試用例。11.1.1什么是UIAutomator2工作原理:UIAutomator2的核心工作原理基于AndroidUI框架的訪問和操作。它利用設(shè)備上的UI控件和屬性來定位和識別屏幕上的元素。開發(fā)者可以編寫測試腳本,使用UIAutomator2提供的API來模擬用戶操作,如點擊按鈕、輸入文本、滑動列表等。這些操作會被執(zhí)行,并且測試框架會捕獲應(yīng)用的反饋,比如UI的變化、事件的觸發(fā)、數(shù)據(jù)的加載等,以驗證應(yīng)用的行為是否符合預(yù)定的測試用例。11.1.1什么是UIAutomator2特點:跨版本兼容性:UIAutomator2支持多個版本的Android系統(tǒng),使得在不同版本的設(shè)備上進行測試成為可能。強大的UI元素定位:它提供了多種方法來查找和定位UI元素,包括ID、文本、屬性等,確保了測試腳本的精確性。靈活的腳本編寫:支持使用多種編程語言編寫測試腳本,如Java、Kotlin等,使得測試腳本的編寫更加靈活和高效。并發(fā)執(zhí)行能力:UIAutomator2能夠同時在多個設(shè)備上執(zhí)行測試腳本,大大提高了測試的效率。集成其他測試工具:它可以與其他測試框架和工具集成,如Espresso、Appium等,以實現(xiàn)更復(fù)雜的測試需求。豐富的API和工具:UIAutomator2提供了豐富的API和工具,幫助開發(fā)者進行更深層次的UI測試,包括對通知、權(quán)限、多窗口模式等的支持??梢暬瘻y試:通過UIAutomator2的可視化工具,開發(fā)者可以直觀地查看和分析UI布局,有助于更好地理解應(yīng)用的UI結(jié)構(gòu)和編寫測試腳本。11.1.2UIAutomator2的環(huán)境搭建搭建Android環(huán)境參考第10章Appium環(huán)境搭建中Android環(huán)境搭建過程安裝Android模擬器安裝UIAutomator2參考第10章Appium環(huán)境搭建中介紹的雷電模擬器綠色版通過pip命令或IDE完成UIAutomator2和weditor的安裝12311.1.2UIAutomator2的環(huán)境搭建>>安裝UIAutomator21.
先通過pip命令完成UIAutomator2的安裝,注意這里指定了版本,命令如下:
pipinstalluiautomator2==2.16.26
如果需要指定國內(nèi)鏡像才能完成uiautomator2下載安裝,可以參考下面清華鏡像的命令形式:pipinstalluiautomator2==2.16.26-ihttps://pypi.tuna.tsingh**./simple安裝完后可以通過pipshowuiautomator2查看是否安裝成功,如下所示即為成功:圖11-1
uiautomator2安裝成功的畫面11.1.2UIAutomator2的環(huán)境搭建>>安裝UIAutomator22.打開Android模擬器(雷電模擬器綠色版),運行CMD命令,在命令行窗口輸入:python-muiautomator2init當(dāng)運行結(jié)束時,雷電模擬器的桌面會生成一個ATX的小黃車圖標(biāo),如下圖所示:圖11-1
在雷電模擬器安裝ATX11.1.2UIAutomator2的環(huán)境搭建>>安裝UIAutomator2點開后界面如右側(cè)所示,在使用時一般不需要再修改配置圖11-2ATX的設(shè)置界面11.1.2UIAutomator2的環(huán)境搭建>>安裝UIAutomator23.開始安裝WEditor。ATXWEditor是一個提供瀏覽器界面操作,用于移動應(yīng)用自動化測試的輔助工具,特別針對Android平臺。其主要功能如下:
元素定位與分析
腳本編寫輔助
遠程設(shè)備操作
調(diào)試代碼
界面化操作由于安裝0.6.5或以上版本的weditor可能會遇到下面編碼錯誤:UnicodeDecodeError:‘gbk’codeccan’tdecodebyte0xadinposition825:illegalmultibytesequence為避免上面錯誤,這里直接安裝0.6.4版本的WEditor,同時為了快速下載,使用了國內(nèi)鏡清華像源。pipinstallweditor==0.6.4-ihttps://pypi.tuna.tsingh**./simple11.1.2UIAutomator2的環(huán)境搭建>>安裝UIAutomator24.啟動Weditor,運行CMD在命令行輸入下面命令內(nèi)容:python-mweditor下面是打開的Weditor瀏覽器界面:圖11-3
瀏覽器中打開的ATXWeditor界面11.1.2UIAutomator2的環(huán)境搭建>>安裝UIAutomator25.在頂部設(shè)備輸入框輸入“emulator-5554”,點擊Connect按鈕,當(dāng)連接成功后,點擊按鈕“DumpHierarchy”同步模擬器畫面,顯示畫面如下:圖11-4連接成功的ATXWeditor界面11.2
常見定位方式11.2常見定位方式1.ResourceID定位ResourceID
是Android開發(fā)過程中賦予每個UI組件的唯一標(biāo)識符,通常在XML布局文件中定義。通過ResourceID定位元素是最直接且穩(wěn)定的定位方式。示例如下:importuiautomator2asu2d=u2.connect(device_name)button=d(resourceId="com.example.app:id/login_button")button.click()在此例中,resourceId參數(shù)接收形如package_name:id/element_id的字符串,其中package_name是應(yīng)用的包名,element_id是在XML布局文件中定義的該按鈕的ID。Device()對象通過resourceId找到指定的按鈕并執(zhí)行點擊操作。11.2常見定位方式2.Text內(nèi)容定位
對于顯示特定文本的UI元素,如按鈕、文本視圖等,可以直接根據(jù)其顯示的文字內(nèi)容進行定位。示例如下:importuiautomator2asu2d=u2.connect(device_name)agree_text=d(text="我同意隱私政策")agree_text.click()上述代碼中,text參數(shù)用于匹配屏幕上所有包含“我同意隱私政策”文本的元素,選擇第一個匹配項并觸發(fā)點擊事件。11.2常見定位方式3.Class屬性定位
根據(jù)UI元素的類名(即控件類型)進行定位,適用于需要定位某一類特定控件的情況,如所有的EditText或Button。示例如下:importuiautomator2asu2d=u2.connect(device_name)all_edittexts=d(className="android.widget.EditText")first_edittext=all_edittexts[0]first_edittext.set_text("輸入的內(nèi)容")這段代碼查找設(shè)備上所有類名為android.widget.EditText的元素(即文本輸入框),選取第一個并設(shè)置其文本內(nèi)容為“輸入的內(nèi)容”。11.2常見定位方式4.ContentDescription定位ContentDescription
是為無障礙功能(如TalkBack)設(shè)置的描述性文字,有時也用于自動化測試中的元素定位。示例如下:importuiautomator2asu2d=u2.connect(device_name)settings_icon=d(description="設(shè)置")settings_icon.click()
此例中,description參數(shù)用于匹配具有指定內(nèi)容描述的元素,如一個帶有“設(shè)置”描述的圖標(biāo),然后對該圖標(biāo)進行點擊。11.2常見定位方式5.Index索引定位
當(dāng)同一類型的多個元素難以通過其他屬性區(qū)分時,可以使用索引來定位它們在同級元素列表中的位置。importuiautomator2asu2d=u2.connect(device_name)list_items=d(className="android.widget.TextView",index=2)list_items.click()這里,index參數(shù)指定了在所有類名為android.widget.TextView的元素中選擇第3個(索引從0開始)進行點擊。11.2常見定位方式6.XPath定位XPath是一種在XML文檔中定位節(jié)點的語言,uiautomator2支持通過編寫XPath表達式來精確地定位UI元素。示例如下:importuiautomator2asu2d=u2.connect(device_name)complex_element=d.xpath('//android.widget.FrameLayout/android.widget.LinearLayout[2]/android.widget.Button')complex_element.click()上述代碼使用XPath表達式定位嵌套結(jié)構(gòu)中的特定按鈕:從根節(jié)點開始,找到第一個FrameLayout,在其子元素中找到第二個LinearLayout,再在該LinearLayout的子元素中定位到所需的Button,最后執(zhí)行點擊操作。11.2常見定位方式7.組合屬性定位
在實際應(yīng)用中,單一屬性可能不足以唯一確定一個元素,此時可以結(jié)合多個屬性進行定位。示例如下:importuiautomator2asu2d=u2.connect(device_name)specific_button=d(className="android.widget.Button",resourceId="com.example.app:id/unique_button",text="確認")specific_button.click()這段代碼同時使用className、resourceId和text三個屬性來精確定位一個按鈕,確保即使在復(fù)雜界面中也能準(zhǔn)確找到并點擊該按鈕。11.2常見定位方式8.父元素與子元素關(guān)系定位
利用元素之間的父子關(guān)系進行定位,特別是在元素本身屬性不唯一但其在某個獨特上下文中的情況下。示例如下:importuiautomator2asu2d=u2.connect(device_name)parent_layout=d(className="android.widget.RelativeLayout",resourceId="com.example.app:id/container")child_button=parent_layout.child(className="android.widget.Button",text="提交")child_button.click()這里先通過resourceId和className定位到一個特定的RelativeLayout容器,然后在其子元素中查找具有指定text屬性的Button按鈕并點擊。11.2常見定位方式9.SwipeSelector與RecyclerView定位
對于特殊控件如SwipeSelector和RecyclerView等滾動列表,uiautomator2提供了專用方法進行定位。這里以RecyclerView為例:importuiautomator2asu2d=u2.connect(device_name)recycler_view=d(className="androidx.recyclerview.widget.RecyclerView")target_item=recycler_view.child(index=5,className="android.widget.TextView",text="目標(biāo)項")target_item.click()首先定位到RecyclerView,然后通過索引、類名和文本內(nèi)容在其中定位到特定條目,并對其執(zhí)行點擊操作。11.3
常見API的使用方法11.2常見定位方式1.元素交互操作點擊(click):點擊指定元素。importuiautomator2asu2d=u2.connect(device_name)login_button=d(resourceId="com.example.app:id/login_button")login_button.click()長按(long_click):長按指定元素一定時間。login_button.long_click(duration=2000)#長按2秒輸入文本(set_text):向文本輸入框或可編輯區(qū)域設(shè)置文本。username_field=d(resourceId="com.example.app:id/username_edittext")username_field.set_text("test_user")11.2常見定位方式1.元素交互操作滑動(swipe):在屏幕或元素上執(zhí)行滑動手勢。#屏幕水平滑動d.swipe(start_x,start_y,end_x,end_y)#元素內(nèi)部垂直滑動scrollable_view=d(resourceId="com.example.app:id/scroll_view")scrollable_view.swipe("up",steps=5)#向上滑動5步拖拽(drag):從一個點拖拽元素到另一個點。source_view=d(resourceId="com.example.app:id/source_view")target_view=d(resourceId="com.example.app:id/target_view")source_view.drag(target_['bounds']['centerX'],target_['bounds']['centerY'])11.2常見定位方式2.元素狀態(tài)查詢獲取屬性值(get_attribute):獲取元素的特定屬性值,如文本、可見性等。title_text=d(resourceId="com.example.app:id/title").get_attribute('text')d(resourceId="com.example.app:id/settings_button").get_attribute('visible')檢查元素是否存在(exists):判斷元素是否存在于當(dāng)前視圖中。ifd(resourceId="com.example.app:id/success_message").exists:print("Successmessageisdisplayed.")else:print("Successmessagenotfound.")等待元素出現(xiàn)(wait_exists):阻塞直到指定元素出現(xiàn)在屏幕上,或超時返回。d(resourceId="com.example.app:id/loading_indicator").wait_exists(timeout=10000)11.2常見定位方式3.其他實用API截圖(screenshot):保存當(dāng)前屏幕快照到指定路徑。d.screenshot("/path/to/save/screenshot.png")設(shè)備信息與操作:(1)設(shè)備旋轉(zhuǎn)(rotate):改變設(shè)備方向。d.rotate(orientation='landscape')#改為橫向(2)獲取設(shè)備信息(info):獲取設(shè)備的詳細信息,如屏幕尺寸、當(dāng)前應(yīng)用包名等。device_info=print(device_info['displayWidth'],device_info['displayHeight'])(3)清除應(yīng)用數(shù)據(jù)(clear_app_data):清理指定應(yīng)用的數(shù)據(jù)。d.clear_app_data("com.example.app")11.4
編譯運行方式11.4編譯運行方式一個計算器計算的實例device_name='emulator-5554'app_package="com.youba.calculate"d=u2.connect(device_name)#連接
安卓設(shè)備
用adbdevices查看pid=d.app_wait(app_package)#等待應(yīng)用運行,returnpid(int)apk_path=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))#獲取當(dāng)前項目的根路徑apk_file="\\u2_demo\\com.youba.calculate10.apk"#獲取待測apk文件路徑#判斷apk是否已安裝ifnotd(packageName=app_package).exists:#安裝apkd.app_install(apk_path+apk_file)ifpid:#如果app應(yīng)用進程存在,先停止該appprint(app_package,"pidis%d"%pid)d.app_stop(app_package)11.4編譯運行方式一個計算器計算的實例device_name='emulator-5554'app_package="com.youba.calculate"d=u2.connect(device_name)#連接
安卓設(shè)備
用adbdevices查看pid=d.app_wait(app_package)#等待應(yīng)用運行,returnpid(int)apk_path=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))#獲取當(dāng)前項目的根路徑apk_file="\\u2_demo\\com.youba.calculate10.apk"#獲取待測apk文件路徑#判斷apk是否已安裝ifnotd(packageName=app_package).exists:#安裝apkd.app_install(apk_path+apk_file)ifpid:#如果app應(yīng)用進程存在,先停止該appprint(app_package,"pidis%d"%pid)d.app_stop(app_package)11.4編譯運行方式一個計算器計算的實例#獲取屏幕寬度和高度width,height=d.window_size()[0],d.window_size()[1]print('屏幕的寬和高:',width,height)d.implicitly_wait(10.0)#啟動APP,stop=True表示啟用應(yīng)用前停止應(yīng)用,獲取包名:adbshelldumpsyswindow|findstrmCurrentFocus獲取{.../...}斜杠/前面的包名d.app_start(app_package,stop=True)#獲取1d(resourceId="com.youba.calculate:id/btn_one").click();sleep(1)#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年外貿(mào)收款合同
- 2026年綠色采購合同
- 2025年人工智能教育輔助平臺開發(fā)項目可行性研究報告
- 2025年智慧社區(qū)管理平臺建設(shè)項目可行性研究報告
- 2025年新能源技術(shù)應(yīng)用與推廣項目可行性研究報告
- 2025年電動交通工具基礎(chǔ)設(shè)施建設(shè)可行性研究報告
- 2025年智能供應(yīng)鏈優(yōu)化解決方案可行性研究報告
- 約個人投資協(xié)議書
- 終止聘用合同范本
- 外交部國際事務(wù)崗位人員招聘標(biāo)準(zhǔn)及考核要點
- 2025年農(nóng)業(yè)農(nóng)村部耕地質(zhì)量和農(nóng)田工程監(jiān)督保護中心度面向社會公開招聘工作人員12人備考題庫有答案詳解
- 2025年看守所民警述職報告
- 景區(qū)接待員工培訓(xùn)課件
- 客源國概況日本
- 學(xué)位授予點評估匯報
- 《Stata數(shù)據(jù)統(tǒng)計分析教程》
- 2024-2025學(xué)年廣州市越秀區(qū)八年級上學(xué)期期末語文試卷(含答案)
- 寵物診療治療試卷2025真題
- 媒體市場競爭力分析-洞察及研究
- 口腔科口腔潰瘍患者漱口液選擇建議
- 精神科抑郁癥心理干預(yù)培訓(xùn)方案
評論
0/150
提交評論