✔1.node.js初体验windows ✔2.commonjs-回顾ES6模块化 ✔3.commonjs的语法介绍 ✔4.commonjs和ES6 Module的区别 ✔5.Bug分类 ✔6.node.js和前端js的区别 ✔7.左关联 ✔8.聚合函数 ✔9.【案例】统计上班时间 ✔10.数据库的索引 ✔11.索引的分类 ✔12.查询数学成绩比语文成绩高的学生 ✔13.查询平均成绩大于80分的学生 ✔14.学生总成绩排序 ✔15.学过体育课学生的年龄 ✔16.查询学号大年龄小的学生 ✔17.整体回顾 ✔18.通过mitmproxy解析短视频App返回数据-接口分析 ✔19.app无法抓包探秘-1 ✔20.UiSelector resourceId定位方式 ✔21.UiSelector混合定位方式-1 ✔21.UiSelector混合定位方式-2 |
|
明智的行动: 每天有一个自己的待办清单 给自己一个最后的期限 对自己说现在就做 改掉坏习惯,培养好习惯。 习惯,运气,机运,都是日常行为的结果。 |
UiSelector混合定位方式:
有时候使用单一的UiSelector定位方式可能无法准确地找到所需的UI元素。这时可以使用混合定位方式,即将多个定位方式组合在一起使用,以增加定位准确性。
下面的Python代码使用了uiautomator2库来实现Android设备的UI自动化,
具体功能为打开Android设备上的设置应用,并使用不同的UiSelector定位方式找到蓝牙设置项,并进行点击操作。
代码示例:
import uiautomator2 as u2
d = u2.connect_usb("N950")
d.app_start(package_name="com.android.settings")
d(className="android.widget.TextView")[4].click()
d(className="android.widget.TextView", instance=4).click()
d(classNameMatches="android\.widget\.\w{8}", text="蓝牙").click()
# 这里是链式定位方式
d(className="android.widget.ListView").child(text="蓝牙").click()
d(className="android.widget.ListView").child_by_text("蓝牙", resourceId="android:id/title").click()
# 完全的链式定位方法,代码非常的冗长,我们是不建议的
d(className="android.widget.ListView").child(resourceId="oppo:id/oppo_preference")[2].child(className="android.widget.RelativeLayout").child(resourceId="android:id/title").click()
# 这种方法多次依据,也不建议
d(resourceId="oppo:id/oppo_preference").sibling(resourceId="oppo:id/oppo_preference", instance=2).click()
代码解读如下:
import uiautomator2 as u2
导入uiautomator2库。
d = u2.connect_usb("N950")
连接USB设备,并返回Device对象。wifi
d.app_start(package_name="com.android.settings")
启动设置应用。
d(className="android.widget.TextView")[4].click()
使用索引值为4的TextView元素进行点击操作。className用于匹配UI元素的类名,[4]
表示选择第5个匹配的UI元素。
d(className="android.widget.TextView", instance=4).click()
使用实例属性来选择第5个匹配的TextView元素,并进行点击操作。
d(classNameMatches="android\.widget\.\w{8}", text="蓝牙").click()
使用正则表达式匹配类名,选择文本内容为"蓝牙"的UI元素,并进行点击操作。
d(className="android.widget.ListView").child(text="蓝牙").click()
使用链式定位方式,先通过类名选择ListView元素,然后选择其中的文本内容为"蓝牙"的子元素,并进行点击操作。
d(className="android.widget.ListView").child_by_text("蓝牙", resourceId="android:id/title").click()
同样使用链式定位方式,但是选择子元素的方法使用child_by_text(),并同时指定了子元素的资源ID,以增加定位的准确性。
d(className="android.widget.ListView").child(resourceId="oppo:id/oppo_preference")[2].child(className="android.widget.RelativeLayout").child(resourceId="android:id/title").click()
完全的链式定位方法,使用了多次的child()方法,定位相对繁琐,不建议使用。
d(resourceId="oppo:id/oppo_preference").sibling(resourceId="oppo:id/oppo_preference", instance=2).click()
使用sibling()方法选择与某个UI元素相邻的UI元素,并使用实例属性选择第3个匹配的UI元素,进行点击操作。
热门评论
学习了,很厉害