uiautomator 2よくある位置決めエラーの問題

17078 ワード

uiautomator 2よくある位置決めエラーの問題
  • は「ある要素が見つからない」とエラーを報告し、ソースコード
    	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,['List', 'of', 'devices', 'attached', '   ', 'device']
    	    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 in ['10']:
    		#    10...
    		pass
    
  • を的確に解決する
  • メーカーに対して自動パッケージ化を誤報した場合(oppo/vivo)、「キャンセル」と「インストール」ボタンがあるため、コマンド「adb install」で直接インストールに成功できない問題:「adb install」が実行できない場合、同時にクリック操作ソリューションを実行する:スレッドを導入し、「adb install」を実行しながら、クリック操作
    # encoding: utf-8
    import os
    import threading
    import time
    
    #     atx apk
    def init_uiautomator2():
        os.system("python -m uiautomator2 init")
        time.sleep(5)
    
    #     ‘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)
                    single_start(packagePath, series, u)
        except Exception as e:
            print(e)
    
  • を実行する