学完前面的几节知识后,发觉uiautomator里面的方法并不能完全满足我们的要求,因此我们需要其他的东西来帮助我们解决问题
1.图片对比(当有些控件不能识别的时候,比如设置两次壁纸是否一样,我们就可以截图对比设置前后的图片是否一样来判断)
图片对比需要的库为aircv和cv2
使用pip install aircv
将cv2.pyd拷贝至site packages目录下
使用方法
import aircv
读取源文件 src=aircv.imread('test1.png')
读取搜索文件 sch=aircv.imread('test2.png')
对比相似度来判断 result=aircv.find_template(src,sch)
如果result返回值为None,说明图片相似度较低,反之会返回一个字典,我们可以通过confidence的值来判断图片的相似度,可以通过rectangle来获取相似点的坐标并进行后续操作
{'confidence': 0.9999995231628418, 'result': (97, 49), 'rectangle': ((59, 0), (59, 98), (136, 0), (136, 98))}
2.adb常用命令
利用adb实现长按电源键,音量键等操作
step1:先利用adb shell getevent来获取事件的值(需要注意的事,使用getevent时需要先关闭wifi、gps、蓝牙等)
step2:使用adb shell sendevent来模拟按键按下操作,如下为长按电源键
os.system('adb -s %s shell sendevent /dev/input/event5 1 116 1' %self.deviceId) 各个设备获取的值可能不一样,需要注意的事是对应的值为16进制的值
os.system('adb -s %s shell sendevent /dev/input/event5 0 0 0 ' %self.deviceId)
self.sleep(2)
os.system('adb -s %s shell sendevent /dev/input/event5 1 116 0' %self.deviceId)
os.system('adb -s %s shell sendevent /dev/input/event5 0 0 0 ' %self.deviceId)
利用adb结束进程
os.system('adb -s %s shell am force-stop com.android.incallui' %self.deviceId)
利用adb启动应用
os.system('adb -s %s shell am start %s' %(self.deviceId,activity))
利用adb截图
os.system('adb -s %s shell screencap /storage/sdcard0/errimg/%s' % (self.deviceId, errimgname))
利用adb拖文件
os.system('adb push srcfile srcfile')
利用adb 检测手机是否重启
runtimeget = os.popen('adb -s %s shell cat /proc/uptime'%self.deviceId)
利用adb查看是否有anr和tombstonees问题出现
anrFileListget = os.popen('adb -s %s shell ls /data/anr'%self.deviceId)
tombstoneFileListget = os.popen('adb -s %s shell ls /data/tombstones'%self.deviceId)
利用adb输入文字
os.system('adb -s %s shell input text %s'%(self.deviceId,content))
利用adb按键
os.system("adb -s %s shell input keyevent '%s'"%(self.deviceId,keycode))
利用adb滑动
os.system('adb -s %s shell input swipe %d %d %d %d %d'%(self.deviceId,x1,y1,x2,y2,time))
利用adb点击
os.system('adb -s %s shell input tap %d %d'%(self.deviceId,x,y))
如果有问题或者好的请加QQ群一起讨论
QQ群: 472527767