uiautomator2-app包相关操作

命令行相关

Tip1:如需指定设备需要传入 --serialpython3 -m uiautomator2 --serial bff1234 <SubCommand>, SubCommand为子命令(init,或者screenshot等)
Tip2:1.0.3后,python3 -m uiautomator2 可以简写为uiautomator2

  • screenshot:截图
$ uiautomator2 screenshot screenshot.jpg
  • current:获取当前包名和activity
$ uiautomator2 current
{
	"package":"com.android.browser",
	"activity":"com.uc.browser.InnerUCMobile"
	"pid": 28478
}
  • uninstall:卸载
$ uiautomator2 uninstall <package-name> # 卸载一个包
$ uiautomator2 uninstall <package-name-1><package-name-2> # 卸载多个包
$ uiautomator2 uninstall --all # 全部卸载
  • stop:停止应用
$ uiautomator2 stop com.example.app # 停止一个app
$ uiautomator2 stop --all # 停止所有的app
  • install :安装apk,apk通过url给出(暂时还不能用)
  • healthcheck:健康检查(暂时还不能用)

python相关

  • 新超时命令

配置accessibility服务的最大空闲时间,超时将自动释放。默认3分钟。

d.set_new_command_timeout(300) # 时间默认为3分钟,参数可以修改为300秒
  • 跟踪http请求和响应以了解其工作方式
>>>d.debug = True
>>>d.info
12:32:47.182 $ curl -X POST -d '{"jsonrpc": "2.0", "id": "b80d3a488580be1f3e9cb3e926175310", "method": "deviceInfo", "params": {}}' 'http://127.0.0.1:54179/jsonrpc/0'
12:32:47.225 Response >>>
{"jsonrpc":"2.0","id":"b80d3a488580be1f3e9cb3e926175310","result":{"currentPackageName":"com.android.mms","displayHeight":1920,"displayRotation":0,"displaySizeDpX":360,"displaySizeDpY":640,"displayWidth":1080,"productName"
:"odin","screenOn":true,"sdkInt":25,"naturalOrientation":true}}
>>>END

  • 隐式等待
    设置元素查找等待时间(默认20s)

Tip:这个方法对clicklong_clickdrag_toget_textset_textclear_text等都有影响

d.implicitly_wait(10.0) # 也可以通过d.settings['wait_timeout'] = 10.0修改
d(text='Setting').click() # 如果设置按钮10s还未显示(也就不能点击),就会抛出UIObjectNotFoundError异常
print("wait timeout", d.implicitly_wait()) # 获取默认隐式等待值
  • 安装app:仅支持从url安装apk
d.app_install('http://some-domain.com/some.apk')
  • 启动App

  • 1、默认方法:先通过atx-agent解析apk包的mainActivity,然后调用am start -n $package/$activity启动

d.app_start("com.example.hello_world")  # 所以参数里面填的是App的包名或者activity
  • 2、使用 monkey - p com.example.hello_world - c android.intent.category.LAUNCHER 1启动。但是这个方法有一个副作用就是它自动会将手机的自动旋转给关掉
d.app_start("com.example.hello_world", use_monkey=True) # 参数里面填写的是App的报名
  • 3、通过指定main_activity的方式启动应用,等价于am start -n com.example.hello_world/.MainActivity
d.app_start("com.example.hello_world", ".MainActivity")
  • 停止应用

Tips:
1、am force-stop:杀掉所有用户空间下的包名pkgName相关的信息
2、pm clear:清除数据信息

# 1、相当于’am force-stop‘,因此使用这种方法停止可能会丢失数据
d.app_stop("com.example.hello_world")
# 2、相当于'pm clear'
d.app_clear("com.example.hello_world")
  • 停止所有正在进行的应用
# 1、停止所有应用
d.app_stop_all()
# 2、停止除了某个App之外的所有应用
d.app_stop_all(excludes=['com.exaples.demo'])
  • 获取App的一些信息
d.app_info("com.examples.demo") # 参数里面是要获取App的包名

# 预期将会输出:
# {
# 	"mainActivity": "com.github.uiautomator.MainActivity",
# 	"label": "ATX",
# 	"versionName": "1.1.7",
# 	 "versionCode": 1001007,
# 	 "size":1760809
# }

# 保存应用程序图标
img = d.app_icon("com.examples.demo")
img.save("icon.png")
  • 列出正在running的所有应用
d.app_list_running()
# 预期输出:
# ["com.xxxx.xxxx", "com.github.uiautomator", "xxxx"]
  • 等待应用程序运行
pid = d.app_wait("com.example.android") # 等待应用运行,然后返回正在运行的这个应用pid

if not pid:
	print("com.example.android is not running")
else:
	print("com.example.android pid is %d" % pid)

d.app_wait("com.example.android", front=True) # 等待应用前台运行
d.app_wait("com.example.android", timeout=20.0) # 最长等待时间20s(默认)
  • 传输文件

  • 1、push一个文件到移动设备

如果在pc端找不到文件,会抛OSError异常

# push 一个文件
d.push("foo.txt", "/sdcard") # 参数分别为文件名和移动设备sd卡中路径

# push一个文件并重命名
d.push("foo.txt", "/sdcard/bar.txt")

# push一个文件对象
with open("foo.txt", 'rb') as f:
	d.push(f, "/sdcard") # 打开一个文件foo.txt,将这个文件赋给f,最后将f文件push到移动设备sd卡中

# push并改变文件的访问模式
d.push("foo.sh", "/data/local/tmp/", mode=0o755)
  • 2、从移动设备pull到终端

Tips:如果在移动设备中找不到文件,会抛出FileNotFoundError异常

d.pull("sdcard/tmp.txt", "tmp.txt") # 参数分别是sd卡的文件路径和预期放在终端中的文件路径

  • 自动跳过弹出窗口(官网说这个检测不太稳定,暂时不要使用,不过可以先记下语法)
d.disable_popups() # 自动跳过弹出窗口
d.disable_popups(False) # 禁用自动跳出弹出窗口
  • 打开一个scheme

  • 1、使用adb命令

adb shell am start -a android.intent.action.VIEW -d "appname://appnamehost"
  • 2、使用Python代码
d.open_url("https://www.baidu.com")
d.open_url("taobao://taobao.com") # 打开淘宝App
d.open_url("appname://appnamehost")
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值