折腾:
【未解决】用uiautomator2操作安卓浏览器打开百度首页
期间,直接调试代码:
inputElem = d(resourceId="com.android.browser:id/b4h") # print("inputElem=%s" % inputElem) # inputElem=<uiautomator2.session.UiObject object at 0x1097abbe0> if inputElem.exists: print("Found input box %s" % inputElem) else: raise Exception("Can not found input box")
是可以找到元素的。
但是直接运行,无调试断点,则找不到:

需要搞清楚:
如何才能实现此处:
等待安卓内置浏览器启动结束
确保安卓当前页面出现对应元素
便于后续能检测到该元素
找找解决办法
好像是可以
while循环检测元素?
不至于
看到有个wait的逻辑
# advanced usage d(text="Settings").exists(timeout=3) # wait Settings appear in 3s, same as .wait(3) # wait until the ui object appears d(text="Settings").wait(timeout=3.0) # return bool # wait until the ui object gone d(text="Settings").wait_gone(timeout=1.0)
那就去试试

Prop Value activity .BrowserActivity package com.android.browser className android.widget.TextView description text 主页 resourceId clickable false label x, y 82, 2220 width 52 height 36 enabled true visible XPath //*[@text="主页"] position (0.092, 0.927) 点击 代码 d(text="主页")
然后去写代码:
实现:
检测 包名是com.android.browser 表示是 小米内置浏览器
且 text=”主页” 表示是第一个tab页:主页
依次确认 浏览器启动完毕了
用代码:
# wait util browser launch complete -> appear 主页 tab d(text="主页").exists(timeout=10)
即可。
【总结】
此处用:
Browser_XiaomiBuiltin = "com.android.browser" browserPackage = Browser_XiaomiBuiltin # wait util browser launch complete -> appear 主页 tab d(text="主页", packageName=browserPackage).exists(timeout=10)
可以实现
等待足够长时间(最长10秒),直到出现
- package是”com.android.browser”
- text是”主页”
表示浏览器的左下角第一个tab
以此表示 浏览器启动完毕了
从而实现了,等待(浏览器启动和加载)完毕(直到出现某个页面上的元素)的效果
【后记 20210409】
后来发现,左下角第一个tab,有时候会变,比如变成了:资讯
所以去用最后下角的 我的 tab,这个不会变
代码改为:
# wait util browser launch complete -> appear 我的 tab # MustShowTabName = "主页" MustShowTabName = "我的" # d(text=MustShowTabName).exists(timeout=10) d(text=MustShowTabName, packageName=browserPackage).exists(timeout=10)
即可。