【python】adb+uiautomator 操作手机
【python】adb+uiautomator 操作手机
uiautomator配置
uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作安装uiautomator
【python】adb+uiautomator 操作手机
uiautomator配置
- uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作
- 安装uiautomator : pip install uiautomator
- 依赖: 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组装电脑配置单推荐报价格
上传时间: 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 |