python3:手机界面元素的识别

如果你有了上一篇关于xpath的知识, 关于手机界面元素的识别因该就不难了.
https://blog.csdn.net/lxy210781/article/details/81814038

首于我们要了解到,手机界面各个元素是有一个xml布局文件的,如果我们能得到当前界面的布局xml文件,就能通过xml文件来识别界面的元素状态了。
为什么要了解界面元素的状态呢?比喻说当你用adb命令点击了一个屏幕上的勾选框时,有时候点中并不会生效并没有勾上,你还想多点击一下,那怎么知道这个勾选框元素点击后有没有生效被打上勾呢?就adb命令而言,是不知道无法获取的,结合上面说到的几点,要想获得元素的状态必须有几个条件:
1. 当前界面的xml文件
2. 通过此xml文件了解到要check的点的条件,即查看当前待查看元素状态的条件(当前是透过xpath来查找).

好了,直接写吧:

def isExistElementValue(query, value, deviceid = ''):
    '''
    因为adb shell来执行是没有办法去判断界面元素的执行状态。
    而有时又必须要判断当前的执行状态,则要用到这个函数.
    常用命令:
    adb shell uiautomator dump /sdcard/ui.xml
    adb pull /sdcard/ui.xml ./Desktop/
    http://web.chacuo.net/formatxml
    '''
    from lxml import etree
    if deviceid == '':
        xmlfilename = 'ui.xml'
        uixmlfile = 'adb shell uiautomator dump /sdcard/' + xmlfilename
        pulluixmlToDesktop = 'adb pull /sdcard/' + xmlfilename + ' C:\\Users\\' + getusername() + '\\Desktop\\'
        print(pulluixmlToDesktop)
    else:
        xmlfilename = deviceid + '.xml'
        uixmlfile = 'adb -s ' + deviceid + ' shell uiautomator dump /sdcard/' + xmlfilename
        pulluixmlToDesktop = 'adb -s ' + deviceid + ' pull /sdcard/' + xmlfilename + ' C:\\Users\\' + getusername() + '\\Desktop\\'
        print(pulluixmlToDesktop)
        
    # 保存当前界面xml并pull至桌面
    os.system(uixmlfile)
    os.system(pulluixmlToDesktop)
    
    # 打开xml文档
    tree = etree.parse('C:\\Users\\' + getusername() + '\\Desktop\\' + xmlfilename)
    result = tree.xpath(query)[0]
    print(f'result:{result}')
    if result == value:
        return True
    else:
        return False
		
# 应用举例:
if __name__ == '__main__':
	# 当前界面upswipeQuery查找的组件条件是唯一的,我们要查看index的值.
	upswipeQuery = '//node[@index="4"]/@index'
	if isExistElementValue(upswipeQuery, '4') == True:
		print('找到了:)')
	else:
		print('未找了:(')

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值