檢查並維持設備端守護進程處於運行狀態,應該是重啟了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
#此函數會影響以下事件click
, long_click
, drag_to
, get_text
, set_text
, clear_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