UIAutomator2的API文檔(一)


檢查並維持設備端守護進程處於運行狀態,應該是重啟了atx守護進程:d.healthcheck()

1.隱式等待

import uiautomator2 as u2
serialno = '7f3dec60'
d = u2.connect_usb(serialno)
d.implicitly_wait(3.0)

#3秒內未找到“搜索”按鈕,則拋出錯誤uiautomator2.exceptions.UiObjectNotFoundError: -32002 Client error: <> data: , method: None

#此函數會影響以下事件clicklong_clickdrag_toget_textset_textclear_tex

d(text="搜索").click()#找到此按鈕則直接點擊

 

2.App啟停基本操作

 2.1安裝app(僅支持從URL安裝apk):d.app_install('http://some-domain.com/some.apk')

   卸載app:d.app_uninstall(pk_name)

 2.2啟動app:d.app_start(package_name)

 2.3停止app:d.app_stop(package_name) #等同於`am force-stop`強制停止app,可能會丟失數據

                         d.app_clear(package_name)#等同於`pm clear`

 2.4停止所有app:d.app_stop_all(excludes=[package_name])#停止所有app除了括號內的,括號內容可選

 2.5獲取app信息:d.app_info(package_name)

   保存app icon:img=d.app_icon(pkname)

         img.save("icon.png")

3.文件推送/拉取

 3.1推送文件到設備中:d.push("foo.txt", "/sdcard/")

 3.2推送文件並重命名:d.push("foo.txt", "/sdcard/bar.txt")

 3.3推送文件對象:with open("foo.txt", 'rb') as f:

         d.push(f, "/sdcard/")

 3.4推送並改變文件訪問權限:d.push("foo.sh", "/data/local/tmp/", mode=0o755)  

 3.5從設備中拉取文件到本地:d.pull("/sdcard/tmp.txt", "tmp.txt")

 3.6從設備中拉取的文件不存在時 拋出錯誤:FileNotFoundError:d.pull("/sdcard/some-file-not-exists.txt", "tmp.txt")

 

這里順便說下快速獲取apk相關包名信息的一些簡易方法

a.獲取包名:d.app_stop_all(),會列出一個當前打開的所有app的包名列表;

 print(d.current_app()) 打印當前運行的app信息

b.命令行打印安裝的所有包:adb shell pm list packages -3

c.打印安裝包路徑:adb shell pm path "包名"

d.打印安裝包信息:aapt d badging "apk包路徑"

 

4.自動點擊權限對話框

官方說:disable_popups函數,檢測發現很不穩定,暫時不要使用--一會兒試試看

d.disable_popups() #自動跳過彈出框

d.disable_popups(False) # 禁用自動跳過

如果此方法無法在你的設備上運行,可以按如下步驟操作獲取控件

  4.1打開Open uiautomatorviewer.bat

  4.2獲取彈出框hierarchy

 

 

5.執行shell命令

output, exit_code = d.shell("pwd", timeout=60) # timeout 60s (Default)
# output: "/\n", exit_code: 0
# Similar to command: adb shell pwd

# Since `shell` function return type is `namedtuple("ShellResponse", ("output", "exit_code"))`
# so we can do some tricks
output = d.shell("pwd").output
exit_code = d.shell("pwd").exit_code
The first argument can be list. for example

output, exit_code = d.shell(["ls", "-l"])
# output: "/....", exit_code: 0

6.通過會話操作app

啟動微信:sess=d.session("com.tencent.mm")

停止微信:sess.close()

使用python操作app,打開微信→點擊騰訊新聞→關閉app

with d.session("com.tencent.mm") as sess:
  sess(text="騰訊新聞").click()

添加app到正在運行狀態:sess=d.session("包名",attach=True)

檢查app運行狀態:sess.running()  #返回True或False

7.獲得設備基本信息

設備概要信息:d.info  

設備詳細信息:d.device_info

設備窗口尺寸:d.window_size()   

當前運行app信息:d.current_app()  

設備序列號:d.serial

設備Wlanip:d.wlan_ip  

等待Activity:d.wait_activity("com.tencent.mm.ui.LauncherUI",timeout=5)#若不設置默認超時10秒,返回True or False

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM