您现在的位置是:首页 > 数码 > 

【python】adb+uiautomator 操作手机

2025-07-21 14:07:24
【python】adb+uiautomator 操作手机 uiautomator配置 uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作安装uiautomator &#x

【python】adb+uiautomator 操作手机

uiautomator配置

  1. uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作
  2. 安装uiautomator : pip install uiautomator
  3. 依赖: app-uiautomator.apk,app-uiautomator-test.apk,bundle.jar,uiautomator-stub.jar
#!/usr/bin/env python
# -*- coding=utf-8 -*-
__author__ = 	Man Li	 import os,sys,re,subprocess
from time import sleep
from uiautomator import device as d
from datetime import datetimeimport setting#检查是否成功连接adb
def check_sp():spinfo=_output(	adb devices	)#return spinfo.split(\r\n)if spinfo.split(\r\n)[1] == 		:return Falseelif spinfo.split(\r\n)[1] != 		:print adb init successfully.#logger.info( *** adb init successfully ***)return Trueelse:return 00001class SP:def __init__(self):self.init_sp=check_sp()self.app_uiautomator = ./app-uiautomator.apkself.app_uiautomator_test = ./app-uiautomator-test.apkself.bundle = ./bundle.jarself.uiautomator_stub = ./uiautomator-stub.jardef status_init(self):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : Status_init.if self.init_sp == True:install_mesg=_output(	adb install -r 	self.app_uiautomator)if Success in install_mesg:_output(	adb install -r 	self.app_uiautomator_test)else:install_mesg=_output(	adb push 	self.bundle	 /data/local/tmp	)if o such file or directory in install_mesg:print [one should know that] Install fail!!!#logger.info(Install fail!!!)else:_output(	adb push 	self.uiautomator_stub	 /data/local/tmp	)else:print Please examine ADB and SP !!!			@获取手机厂商			def sp_Vendor(self):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : Vendor info.if self.init_sp == True:sp_mesg=_output(	adb -d shell getprop ro.product.brand	)return str(sp_mesg)else:print Please examine ADB and SP !!!			@获取手机型号			def sp_name(self):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : SP info.if self.init_sp == True:deviceame = _output(	adb shell getprop ro.	)return str(deviceame)else:print Please examine ADB and SP !!!			@打开手机的BT			def open_BT(self):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : open BT UI.if self.init_sp == True:			_output(	adb shell am start -a android.bluetooth.adapter.action.REQUEST_EABLE	)sleep(0.5)open_bt=d(text=是).(timeout=500)open_bt2=d(text=允许).(timeout=500)if open_bt == True:d(text=是).click()if open_bt2 == True:d(text=允许).click()			bt_settings=_output(	adb shell am start -a android.settings.BLUETOOTH_SETTIGS	)print len(bt_settings.split(\n))if len(bt_settings.split(\n))==2 or len(bt_settings.split(\n))==:print ok open BTelse:settings_open=_output(	adb shell am start -a android.settings.SETTIGS	)print len(settings_open.split(\n))if len(settings_open.split(\n))==2 or len(settings_open.split(\n))==:print ok open settingssleep(1)#d(text=u连接).click()if d(text=u连接).(timeout=500) == True:d(text=u连接).click()if d(text=u蓝牙).(timeout=500) == True:d(text=u蓝牙).click()print open BT successfully!!!else:print not font plases add code...else:print not open settings#_output(	adb shell am start -a android.settings.BLUETOOTH_SETTIGS	)else:print Please examine ADB and SP !!!			@在BT界面开关BT			def popf_bt(self):if self.init_sp == True:deviceame = _output(	adb shell getprop ro.	)print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : power on/off BT.    if M6SPlus in deviceame:print deviceameif d(text=u蓝牙).(timeout=500) == True:if d(text=u已开启).(timeout=500) == True:d(text=u已开启).click()elif d(text=u已关闭).(timeout=500) == True:d(text=u已关闭).click()else:_output(	adb shell am start -a android.settings.BLUETOOTH_SETTIGS	)elif samsung in _output(	adb -d shell getprop ro.product.brand	):if d(text=u开).(timeout=500) == True:d(text=u开).click()elif d(text=u关).(timeout=500) == True:d(text=u关).click()#elif d(text=u蓝牙).(timeout=500) or d(text=uBT).(timeout=500) == True:else:if d(text=u蓝牙).(timeout=500) == True:if d(text=u开启).(timeout=500) == True:d(text=u开启).click()elif d(text=u关闭).(timeout=500) == True:d(text=u关闭).click()else:if d(text=u蓝牙).(timeout=500) == True:d(text=u蓝牙).click()else:d(classame=android.widget.ListView, resourceId=android:id/list).child_by_text(u蓝牙, classame=android.widget.LinearLayout).child(classame=android.widget.Switch).click()else:_output(	adb shell am start -a android.settings.BLUETOOTH_SETTIGS	)else:print Please examine ADB and SP !!!			@在WLA界面开关wifi			def popf_wifi(self):if self.init_sp == True:deviceame = _output(	adb shell getprop ro.	)print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : power on/off wifi.        if M6SPlus in deviceame:print deviceameif d(text=uWLA).(timeout=500) == True:if d(text=u已开启).(timeout=500) == True:d(text=u已开启).click()elif d(text=u已关闭).(timeout=500) == True:d(text=u已关闭).click()elif d(text=uWLA).(timeout=500) or d(text=uwifi).(timeout=500) == True:print alld(classame=android.widget.ListView, resourceId=android:id/list).child_by_text(WLA, classame=android.widget.LinearLayout).child(classame=android.widget.Switch).click()else:print Please examine ADB and SP !!!			@在WLA界面开关wifi			def call(self,number):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : Calling : str(number)if self.init_sp == True:call_cmd=	adb shell am start -a android.intent.action.CALL tel:	str(number)_output(call_cmd)else:print Please examine ADB and SP !!!			@手机重启			def sp_reboot(self):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : Reboot. if self.init_sp == True:_output(	adb shell reboot	)else:print Please examine ADB and SP !!!			@手机解屏			def Slider(self):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : Slider. if self.init_sp == True:d.()d.swipe(600, 1000, 600, 10, steps=10)d.press.home()#_output(	adb shell input keyevent 82	)else:print Please examine ADB and SP !!!			@手机BT寻devices 的蓝牙地址			def con_devices(self,devices_btnumber):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : Found Devices BT add : str(devices_btnumber)devices_bt=d(text=devices_btnumber).(timeout=500)if devices_bt == True:d(text=devices_btnumber).click()else:print not fund devices BT			@在手机BT里点击devices的蓝牙地址并确认断开			def discon_devices(self,devices_btnumber):print [str(str(()).split( )[1])[0:-7]] ==SP==  Doing ---> : Disconnection Devices BT add : str(devices_btnumber)devices_bt=d(text=devices_btnumber).(timeout=500)if devices_bt == True:d(text=devices_btnumber).click()if d(text=u确定).(timeout=500) == True:d(text=u确定).click()elif d(text=OK).(timeout=500) == True:d(text=OK).click()else:print not discon_deviceselse:print not fund devices BTdef btconn_ok(self):if d(text=u蓝牙).(timeout=500) or d(text=uBT).(timeout=500) == True:return d(text=u已连接).(timeout=500)else:_BT()print open sp bt...#获取当前电脑接入的SPdef get_sp(self):deviceInfo= _output(	adb devices -l	)    sp=deviceInfo.split(	\n	)[1]sp_sn=sp.split(	 	)[0]sp_name=sp.split(	 	)[-1]deviceame = _output(	adb shell getprop ro.	)return sp_sn,sp_name,deviceame#获取SP的所有信息def sp_info(self):sp_hand=check_sp()if sp_hand ==True:try:a=get_sp()model_number= _output(	adb shell getprop ro.	)sp_ver=_output(	adb shell getprop ro.build.version.release	)sp_bui=_output(	adb shell getprop ro.bootimage.build.fingerprint	)sp_pro=_output(	adb shell cat /proc/version	)sp_med=_output(	adb shell getprop version.release	)SP_info={SP S:a[0],SP ame:a[1],SP Model number:model_number,Android version:sp_ver,SP Build nymber:sp_bui,SP Kernel version:sp_pro,SP Custom build version:sp_med}return SP_infoexcept:error= adb error.return errorelse:error= not fond SP.return error#获取MTKLogdef get_MTKLog(self,savepath):try:mtklog=_output(	adb pull /storage/sdcard0/mtklog/ 	savepath)#print mtklogreturn mtklogexcept:error= adb error.return error#安装apkdef adb_install(self,apkpath):try:mtklog=_output(	adb install 	apkpath)print mtklogexcept:print faildef connect_Wifi(self):quick_settings()wifi_c=d(text=Wi-Fi).(timeout=500)wlan_c=d(text=WLA).(timeout=500)if wifi_c==True:d(text=Wi-Fi).click()d(text=7697AP).click()model_number= _output(	adb shell input text \1245678\	)d(text= COECT).click()return 001elif wlan_c ==True:d(text=WLA).click()d(text=7697AP).click()model_number= _output(	adb shell input text \1245678\	)d(text=u连接).click()return 002else:return False# APK:  BluetoothLeTestClientdef BluetoothLeTestClient_doing(self):#from uiautomator import device as d#d.wakeup()d.()d.swipe(700, 200, 800, 10, steps=10)tester_tool.add_info(open BluetoothLeTestClient APK)keil_app=_output(	adb shell am force-stop bluetooth.	)d.press.home()model_number= _output(	adb shell am start -n bluetooth./bluetooth..DeviceScanActivity	)open_bt=d(text=允许).(timeout=500)scon_init=d(text=Scan).(timeout=500)print open_btif open_bt == True:d(text=允许).click()if scon_init == True:d(text=Scan).click()#time.sleep(5)#xml=d.dump()#print xmltester_tool.add_info(BluetoothLeTestClient APK doing Scan)scon_end=d(text=Scan).(timeout=0000)a=d(text=cdf).(timeout=5000)print aif a==True:tester_tool.add_info(BluetoothLeTestClient APK have BLE name :  cdf)#print have cdf#d.swipe(500, 500, 500, 10)d(text=cdf).click()tester_tool.add_info(BluetoothLeTestClient APK clicking cdf)#print click cdfd.wait.idle()conn=d(text= Connected).(timeout=20000)return connelif a==False and scon_end== True:count = 0while (count < ):print have scond.swipe(700, 1800, 800, 10)if a==True:d(text=cdf).click()print click cdfprint fund cdfbreakelse:print goprint 	The count is:	, countcount = count  1#info=not fund cdfconn=d(text= Connected).(timeout=20000)if conn==True:con=okreturn conelse:con=conn failreturn con#return infoelse:tester_tool.add_info(BluetoothLeTestClient APK not fund BLE name :  cdf)print not fund cdf # APK:  BluetoothLeTestServerdef BluetoothLeTestServer_doing(self):d.()d.swipe(700, 200, 800, 10, steps=10)keil_app=_output(	adb shell am force-stop bluetooth.le.server	)d.press.home()model_number= _output(	adb shell am start -n bluetooth.le.server/.DeviceControlActivity	)#d(text=BLE Test Server).right().click()d(text=		, classame=	android.widget.ImageButton	).click()d(text=AdvertiserManager).click()d(text=Add).click()d(text=1. Add Advertiser 1).click()d(text=AdvertiserManager).click()class SP_state:def __init__(self):self.init_sp=check_sp()#检查sp是否有连上a2dpdef a2dp_init(self):if self.init_sp == True:deviceame = _output(	adb shell \dumpsys audio | grep \	Devices: \	\	)print [str(str(()).split( )[1])[0:-7]] ==SP==  State ---> : BT Init Info.        print - STREAM_VOICE_CALL: str(deviceame.split(Devices:)[1])print - STREAM_SYSTEM:str(deviceame.split(Devices:)[2])print - STREAM_MUSIC:str(deviceame.split(Devices:)[4])print - STREAM_BLUETOOTH_SCO:str(deviceame.split(Devices:)[7])if bt_a2dp in str(deviceame.split(Devices:)[4]) and str(deviceame.split(Devices:)[7]):return Trueelse:return Falseelse:print Please examine ADB and SP !!!#检查与sp 连接a2dp设备的名称def a2dp_devices(self):if self.init_sp == True:deviceame = _output(	adb shell \dumpsys audio | grep \	mBluetoothame\	\	)print [str(str(()).split( )[1])[0:-7]] ==SP==  State ---> : Connected A2DP Devices ame.        #print deviceameif null in str(deviceame.split(mBluetoothame=)[1]):return not connect a2dp devices!\nelse:return str(deviceame.split(mBluetoothame=)[1])else:print Please examine ADB and SP !!!#打开 media.playerdef open_music_player(self):if self.init_sp == True:_output(	adb shell am start -a android.intent.action.MUSIC_PLAYER	)else:print Please examine ADB and SP !!!#检查 player状态def player_state(self):if self.init_sp == True:deviceame = _output(	adb shell \dumpsys media.player | grep \	state\	\	)musicame = _output(	adb shell \dumpsys media.player | grep \	/proc/\	\	)#print musicamemusicame_1 = str(musicame.split(/proc/)[-1])musicame_2 = str(musicame_1.split(/)[-1])if mp in str(musicame_2.split(.)[-1]) or wav in str(musicame_2.split(.)[-1]):print Music ame:  str(musicame_2.split(.)[0])#logger.info(Music ame:  str(musicame_2.split(.)[0]))else:print not play music, plase play music;if state(0) in deviceame:print player_state : play#logger.info(state : 0)return 1elif state(2) in deviceame:print player_state : pause#logger.info(state : 2)return 2else:print player_state : not play music#logger.info(state : ?)return 0else:print Please examine ADB and SP !!!def play_music_name(self):if self.init_sp == True:musicame = _output(	adb shell \dumpsys media.player | grep \	/proc/\	\	)musicame_1 = str(musicame.split(/proc/)[-1])musicame_2 = str(musicame_1.split(/)[-1])if mp in str(musicame_2.split(.)[-1]) or wav in str(musicame_2.split(.)[-1]):print Music ame:  str(musicame_2.split(.)[0])return str(musicame_2.split(.)[0])else:print not play music, plase play music;else:print Please examine ADB and SP !!!#检查call 状态def call_state(self):if self.init_sp == True:deviceame = _output(	adb shell \dumpsys window | grep \	mCurrentFocus\	\	)if com.android.incallui.InCallActivity in deviceame.split(/)[-1]:print sp have call.return 101else:print not call.return 102else:print Please examine ADB and SP !!!

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/719508.html

相关标签:无
上传时间: 2023-12-01 08:17:17
留言与评论(共有 6 条评论)
本站网友 红糖姜茶的作用
19分钟前 发表
sp_mesg=_output( adb -d shell getprop ro.product.brand )return str(sp_mesg)else
本站网友 番茄红素片
18分钟前 发表
print [str(str(()).split( )[1])[0
本站网友 全国贫困县
20分钟前 发表
print Music ame
本站网友 花城汇
18分钟前 发表
print Please examine ADB and SP !!! @手机BT寻devices 的蓝牙地址 def con_devices(self
本站网友 4444zzz
19分钟前 发表
print [str(str(()).split( )[1])[0