uiautomator2常见定位报错问题
-
报错“找不到某元素”,源代码
u(text="设置").click()
问题:由于点击后没有给页面反应时间,立马判断了是否存在某元素
解决方案1:import time time.sleep(10) # 等待10s后,再去执行接下来的操作 u(text="设置").click()
解决方案2:
import time u(text="设置").click(timeout=10) # 需要保证在10s的时间内去点击设置
问题:由于没有没有该元素,才导致的错误;需要提前判断是否存在
解决方案3:time.sleep(5) # 等待5s找到“设置” if u(text="设置").exists: u(text="设置").click()
-
报错连接多个设备时,无法识别操作的哪台设备
问题:执行adb 命令时,需要识别操作的设备号
解决方案:# 获取多个设备序列号 def attachDeviceList(): device_list = [] cmd_output = os.popen("adb devices", "r").read().split()[4:] # 从输出的列表中第5个开始为设备序列号,将后面所有内容全部输出 for i in range(len(cmd_output)): if i % 2 == 0: device_list.append(cmd_output[i]) # 将提取出来的序列号加入到device_list列表中 if device_list: print(device_list) return device_list else: return print("No device found.") if __name__ == '__main__': try: u = ut2.connect_usb() while True: for series in attachDeviceList(): print("此设备是 :", series) # 针对单个设备执行 summary_start() summary_start(series, u) except Exception as e: print(e)
-
报错 不同机型所需要点击的位置不同,也无法找到相同的定位位置
问题:找不到相同的定位位置,无法实现机型覆盖
解决方案:利用手机系统的不同,针对性解决system_version = os.popen("adb shell getprop ro.build.version.release", "r").read().rstrip() if system_version in ['5.1']: # 手机是5.1系统,则... pass elif system_version in ['6.0.1']: # 手机是6.0.1系统,则... pass elif system_version == ['10']: # 手机是10系统,则... pass
-
报错 针对厂商自动化装包时(oppo/vivo),由于会有“取消”和“安装”按钮,无法通过命令‘adb install ’直接安装成功
问题:无法执行‘adb install ’时,同时执行点击操作
解决方案:引入线程,一边 执行‘adb install ’,一边 执行点击操作# encoding: utf-8 import os import threading import time # 安装执行‘adb install ’ def install_apk(packagePath, series): os.system("adb -s " + series + " install " + packagePath) # 安装执行点击操作 def click_apk(series, u): u(text="安装").click(timeout=10) time.sleep(5) u(text="打开").click(timeout=10) time.sleep(5) # 引入线程,一边 执行‘adb install ’,一边 执行点击操作 def single_start(packagePath, series,u): threads = [] # 使用线程操作,添加线程队列 t1 = threading.Thread(target=install_apk, args=[packagePath, series]) # 装载线程 threads.append(t1) t2 = threading.Thread(target=click_apk, args=[series, u]) threads.append(t2) for t in threads: # 对线程列表进行操作 t.setDaemon(True) t.start() time.sleep(30) if __name__ == '__main__': init_uiautomator2() u = ut2.connect_usb() try: while True: for series in attachDeviceList(): print("此设备是 :", series) summary_start(series, u) except Exception as e: print(e)