def adb_devices(self): """ 获取手机设备号 :return: """ adb = ADB() if not adb.devices(): raise IndexError('not devices found') return adb.devices()
def __init__(self): """ self.config: 获取配置文件 self.poco: 获取poco实例 """ self.config = Config().get_data print(f"device(): {device()}") # 检查adb状态 adb = ADB() device_list = adb.devices() print(f"device_list: {device_list}") device_num = len(device_list) >= 1 # print(device_list) assert_equal(device_num, True, "设备连接数至少>=1") # self.device_list = device_list # 获取poco实例 self.poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) # 获取根目录 # self.root_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # if not cli_setup(): # auto_setup( # basedir=self.root_dir, # devices=self.["android_devices"], # logdir=False # ) self._setting() self.width, self.height = device().get_current_resolution() print("[BasePage] init...") self.root_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) self.main_phone = self.config.get("main_phone")
def initAllDevice(): #初始化连接当前所有的设备 global adb try: adb = ADB() allDevices = adb.devices() for sn, dev in allDevices: connect_device('android:///' + sn) except Exception as err: raise err else: print([dev.serialno for dev in G.DEVICE_LIST])
def __init__(self): '''初始化设备''' adb = ADB() device_list = adb.devices() deviceNum = len(device_list) >= 1 assert_equal(deviceNum, True, "设备连接数量至少为1台以上") for i in range(len(device_list)): self.device = connect_device(self.main_phone) auto_setup(__file__, logdir=False, devices=[self.main_phone + device_list[i][0]]) self.check_app() self.setting()
def preload_airtest_device_context(run_on_win=False, window_title='^.*errors and.*$'): from airtest.cli.runner import device as current_device if not current_device(): from airtest.core.main import set_serialno, set_windows from airtest.core.settings import Settings from airtest.core.android.adb import ADB adb_client = ADB() available_devices = adb_client.devices('device') if run_on_win or not available_devices: Settings.FIND_INSIDE = [8, 30] # 窗口边框偏移 set_windows(window_title=window_title) else: set_serialno() exec("from airtest.core.main import *") in globals()
def getDevs(self): adb = ADB() devs = adb.devices() if len(devs) > 0 and len(devs) < 2: devs1 = devs[0][0] print(devs1) return devs1 elif len(devs) == 2: devs1 = devs[0][0] devs2 = devs[1][0] d1 = connect_device('Android:///%s' % devs1) d2 = connect_device('Android:///%s' % devs2) print(d1, d2) return list(devs1), list(devs2) else: print(u'没发现手机设备')
def changedev(self): adb = ADB() devs = adb.devices() if len(devs) == 1: devs1 = devs[0][0] dev1 = connect_device("Android:///%s" % devs1) print(devs1) return dev1 elif len(devs) == 2: devs1 = devs[0][0] devs2 = devs[1][0] dev1 = connect_device("Android:///%s" % devs1) dev2 = connect_device("Android:///%s" % devs2) print(devs1, devs2) return dev1, dev2 else: print('电脑没发现插有手机设备,如有插入手机,请检查相关端口是否被占用?') return False
class Driver(): def start_app(self, uuid): init_device(platform="Android", uuid=uuid) # 初始化设备,并设置为当前设备 start_app("com.vivalnk.vitalsmonitor") #打开mvm def get_poco(self): poco = AndroidUiautomationPoco(screenshot_each_action=False) return poco def close_app(self): stop_app("com.vivalnk.vitalsmonitor") def back(self): keyevent("KEYCODE_BACK") if __name__ == '__main__': p_list = [] from multiprocessing import Process driver = Driver() adb = ADB() all_devices = adb.devices() for item in range(len(all_devices)): # print(all_devices[item][0]) p = Process(target=driver.start_app, args=(all_devices[item][0], )) p.start() p_list.append(p) for i in p_list: i.join()
class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow, SingleInst): def __init__(self, parent=None): super(MyWindow, self).__init__(parent) self.setupUi(self) self.InitListWidget() self.InitSignal() self.m_ScriptRoot = utils.GetCfgData('scripts_root') self.m_ADB = ADB() self.RefreshScripts() self.RefreshADB() self.m_Running = False def InitListWidget(self): self.m_DeviceListWidget = CMyListWidget(self.listWidget, self.checkBox) self.m_ScriptListWidget = CMyListWidget(self.LWScripts, self.CBScripts) def InitSignal(self): self.RefreshBtn.clicked.connect(self.RefreshADB) # self.BtnRefreshScripts.clicked.connect(self.RefreshScripts) self.BtnLaunch.clicked.connect(self.Lauch) self.BtnSelectScripts.clicked.connect(self.SelectScriptRoot) self.checkBox.stateChanged.connect(self.m_DeviceListWidget.SelcetAll) self.CBScripts.stateChanged.connect(self.m_ScriptListWidget.SelcetAll) self.BtnConnect.clicked.connect(self.ConnectRemoteADB) def RefreshADB(self): lDevices = [(tDevice, tDevice[1] == 'device') for tDevice in self.m_ADB.devices()] self.m_DeviceListWidget.Refresh(lDevices) def RefreshScripts(self): if not self.m_ScriptRoot: utils.SetCfgData('scripts_root', DEFAULT_SCRIPTS_ROOT) self.m_ScriptRoot = DEFAULT_SCRIPTS_ROOT if not os.path.exists(self.m_ScriptRoot): os.mkdir(self.m_ScriptRoot) self.LScriptsRoot.setText(self.m_ScriptRoot) lScripts = [(sScript, True) for sScript in os.listdir(self.m_ScriptRoot) if sScript.endswith('.air')] self.m_ScriptListWidget.Refresh(lScripts) def SelectScriptRoot(self): sDirChoose = QtWidgets.QFileDialog.getExistingDirectory( self, "选取文件夹", self.m_ScriptRoot) if sDirChoose == "": return self.m_ScriptRoot = sDirChoose self.RefreshScripts() def ShowReport(self, sCombineLog): self.m_Running = False import webbrowser reply = QtWidgets.QMessageBox.question( self, "Question", self.tr("测试结束,点击查看报告"), QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Ok) if reply == QtWidgets.QMessageBox.Ok: webbrowser.open(sCombineLog, new=0, autoraise=True) elif reply == QtWidgets.QMessageBox.Cancel: print('点击了取消,报告路径:%s' % sCombineLog) else: return def Lauch(self): if self.m_Running: QtWidgets.QMessageBox.information(self, "提示", self.tr("正在运行中!")) return lDevices = self.m_DeviceListWidget.GetSelectedList() lScripts = self.m_ScriptListWidget.GetSelectedList() if not lDevices: QtWidgets.QMessageBox.warning(self, "提示", self.tr("请选择设备!")) return if not lScripts: QtWidgets.QMessageBox.warning(self, "提示", self.tr("请选择脚本!")) return sMode = self.CBMode.currentText()[-1] utils.SetCfgData(CFG_SCRIPTS, ','.join(lScripts)) utils.SetCfgData(CFG_DEVICES, ','.join(lDevices)) utils.SetCfgData(CFG_MODE, sMode) utils.SetCfgData(CFG_SCRIPTS_ROOT, self.m_ScriptRoot) utils.SetCfgData(CFG_PLATFORM, 'Android') self.m_Running = True self.m_RunThread = CRunthread() self.m_RunThread._signal.connect(self.ShowReport) self.m_RunThread.start() def ConnectRemoteADB(self): sText = self.TextAddr.text() sCmd = sText.split()[-2] sAddr = sText.split()[-1] if sCmd == 'connect': ADB(serialno=sAddr) elif sCmd == 'disconnect': ADB(serialno=sAddr).disconnect() else: QtWidgets.QMessageBox.information( self, "提示", self.tr("请输入正确指令!(connect or disconnect)")) self.RefreshADB()
import time import cv2 from airtest.core.android.adb import ADB from airtest.core.android.minicap import Minicap adb = ADB( # serialno='emulator-5554', # adb_path=None, # server_addr=None, # display_id=None, # input_event=None ) devices_list = adb.devices() adb.serialno = devices_list[0][0] mcap = Minicap(adb) import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 import numpy as np # lena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png # 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理 # lena.shape #(512, 512, 3) for frame in mcap.get_stream(): st = time.time() nparr = np.frombuffer(frame, np.uint8) img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)