目录
元素定位
根据prop结构词定位
子元素和兄弟定位
相对定位
XPATH定位
元素常用API
操作
模拟九宫格解锁(六点连线)
元素定位
根据prop结构词定位
ui2支持 android 中 UiSelector 类中的所有定位方式:https://developer.android.google.cn/reference/android/support/test/uiautomator/UiSelector
名称 | 描述 |
---|
text | text是指定文本的元素 | textContains | text中包含有指定文本的元素 | textMatches | text符合指定正则的元素 | textStartsWith | text以指定文本开头的元素 | className | className是指定类名的元素 | classNameMatches | className类名符合指定正则的元素 | description | description是指定文本的元素 | descriptionContains | description中包含有指定文本的元素 | descriptionMatches | description符合指定正则的元素 | descriptionStartsWith | description以指定文本开头的元素 | checkable | 可检查的元素,参数为True,False | checked | 已选中的元素,通常用于复选框,参数为True,False | clickable | 可点击的元素,参数为True,False | longClickable | 可长按的元素,参数为True,False | scrollable | 可滚动的元素,参数为True,False | enabled | 已激活的元素,参数为True,False | focusable | 可聚焦的元素,参数为True,False | focused | 获得了焦点的元素,参数为True,False | selected | 当前选中的元素,参数为True,False | packageName | packageName为指定包名的元素 | packageNameMatches | packageName为符合正则的元素 | resourceId | resourceId为指定内容的元素 | resourceIdMatches | resourceId为符合指定正则的元素 | index | 元素索引 | instance | |
子元素和兄弟定位
子元素定位
child()
ele = d(resourceId='com.cctv.yangshipin.app.androidp:id/home_main_layout')
ele.child(text='时事',index=0).click()
# ele.child_selector(text='时事',index=0).click() # 同.child()
# ele.child_by_text('军事',allow_scroll_search=True).click()
# ele.child_by_instance()
# ele.child_by_description()
兄弟元素定位
sibling()
element = d(textContains='美食天下', className='android.widget.TextView')
element.sibling(text='相册').click()
相对定位
相对定位可以定位在某个元素前后左右的其他元素,括号里面可以添加相对定位的目标元素结构词方法,也可以不添加,如果不添加则默认选择对应位置的第一个目标元素
element = d(textContains='美食天下', className='android.widget.TextView')
element.left(text='手机管家').click()
element.right(text='手机管家').click()
element.up(text='手机管家').click()
element.down(text='手机管家').click()
XPATH定位
xpath表达式同web:https://blog.csdn.net/JBY2020/article/details/111301327
注意:在xpath定位中,ui2中的元素prop结构词 description 定位需要替换为content-desc,resourceId 需要替换为resource-id
元素常用API
方法 | 描述 | 返回值 | 备注 |
---|
exists() | 判断元素是否存在 | True,Flase | @property装饰的类属性方法 | info | 返回元素的所有信息 | 字典 | @property装饰的类属性方法 | get_text() | 返回元素文本 | 字符串 | | set_text(text) | 设置元素文本 | None | | clear_text() | 清空元素文本 | None | | center() | 返回元素的中心点位置 | (x,y) | 基于整个屏幕的点 |
常用API之exists()
1、省略括号使用,exists
- 如果是连接的手机对象,返回的是一个实例对象
- 如果是定位元素,返回的是布尔值
2、不省略括号使用exists()
- 如果是连接的手机对象,返回的是布尔值
- 如果是定位元素,返回的是布尔值
3、括号中带参
可以传入prop结构词参数,还可以添加超时时间
d = u2.connect('192.168.1.27')
print(d.exists(text='支付宝', timeout=3))
4、重要使用,可以判断元素是否存在或出现来进行条件分支判断操作
常用API之center()
参数offset表示相对元素所在像素点坐标的比例 ((0,0)元素的左顶点)
# 源码
def center(self, offset=(0.5, 0.5)):
"""
Args:
offset: optional, (x_off, y_off)
(0, 0) means left-top, (0.5, 0.5) means middle(Default)
# offset:可选,(x_off, y_off)(0,0)表示左顶,(0.5,0.5)表示中间(默认)
Return:
center point (x, y)
element = d(textContains='美食天下', className='android.widget.TextView')
print('元素边界坐标位置:',element.info['bounds'])
print(element.center(offset=(0,0))) # 左顶点
print(element.center(offset=(1,1))) # 右下点
print(element.center(offset=(0.5,0.5))) # 中间点
操作
点击、拖动、滑动、长按?
文本输入:? .send_keys('python')
清除文本:? .clear_text()
键盘输入:? .press('enter')? 或? ?.keyevent('enter')? ? ? ?#? keyevent是通过“adb shell input keyevent”方式输入,支持按键更加丰富
切换输入法:??d.set_fastinput_ime()? ? ? ?? #?切换成ui2的输入法时会隐藏掉系统原来的输入法,括号中的参数为布尔值,当传入False时会使用系统默认输入法,默认为Fasle(使用系统默认的输入法)
模拟输入法功能:d.send_action("search")? ? ? ? ?# 可模拟的功能:go ,search ,send ,next, done ,previous,当press方法无效的时候可以使用?
模拟九宫格解锁(六点连线)
touch类的四种方法:
d.touch.down(100,300) # 按下
d.touch.sleep(seconds=3.0) # 参数为按下之后持续的时间长度
d.touch.move(300,500) # 移动后的位置
d.touch.up(300,500) # 抬起
方法1:使用touch类方法
d.touch.down(0.536, 0.651).move(0.507, 0.706).move(0.259, 0.853).move(0.729, 0.538).move(0.717, 0.805).move(0.219, 0.725).up(0.219, 0.725)
方法2:使用swipe_points()滑动方法
# 解锁密码,九宫格连线解锁方法下示,如果是数字解锁,使用点击方法click(x,y)即可,points表示不抬起
d.swipe_points([(0.536, 0.651),(0.507, 0.706),(0.259, 0.853),(0.729, 0.538),(0.717, 0.805),(0.219, 0.725)])
|