Beispiel #1
0
    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")
Beispiel #2
0
def connect_dev(devList=[]):
	for dev in devList:
		ADB(dev).disconnect()
		connect_device(f"android:///{dev}")
		print(ADB(dev).get_status())
	devices = [tmp[0] for tmp in ADB().devices(state="device")]
	return devices
Beispiel #3
0
def get_device(serialno,on_devices,old_devices):
    ip = is_ip_device(serialno)
    device_info = None
    if ip:
        try:
            device_info = old_devices[ip]
            device_info['status'] ='0'
        except:
            pass
    else:
        try:
            # USB连接 获取ip
            device_adb = ADB(serialno)
            ip = device_adb.get_ip_address()
            try:
                # 该USB已通过ip连接
                old_devices[ip]
                on_devices.index(ip+ADB_PORT)
            except:
                # 用adb tcpip模式重启adb
                device_adb.cmd(['tcpip',ADB_PORT[1:]])
                device_info = adb_ip_connect(ip)
                device_info['id'] = serialno
        except:
                pass
    return device_info
Beispiel #4
0
    def __init__(self, serialno=None, host=None,
                 cap_method=CAP_METHOD.MINICAP_STREAM,
                 touch_method=TOUCH_METHOD.MINITOUCH,
                 ime_method=IME_METHOD.YOSEMITEIME,
                 ori_method=ORI_METHOD.MINICAP,
                 display_id=None,
                 input_event=None):
        super(Android, self).__init__()
        self.serialno = serialno or self.get_default_device()
        self.cap_method = cap_method.upper()
        self.touch_method = touch_method.upper()
        self.ime_method = ime_method.upper()
        self.ori_method = ori_method.upper()
        self.display_id = display_id
        self.input_event = input_event
        # init adb
        self.adb = ADB(self.serialno, server_addr=host, display_id=self.display_id, input_event=self.input_event)
        self.adb.wait_for_device()
        self.sdk_version = self.adb.sdk_version
        if self.sdk_version >= SDK_VERISON_ANDROID10 and self.touch_method == TOUCH_METHOD.MINITOUCH:
            self.touch_method = TOUCH_METHOD.MAXTOUCH
        self._display_info = {}
        self._current_orientation = None
        # init components
        self.rotation_watcher = RotationWatcher(self.adb)
        self.minicap = Minicap(self.adb, ori_function=self.get_display_info, display_id=self.display_id)
        self.javacap = Javacap(self.adb)
        self.minitouch = Minitouch(self.adb, ori_function=self.get_display_info, input_event=self.input_event)
        self.maxtouch = Maxtouch(self.adb, ori_function=self.get_display_info)

        self.yosemite_ime = YosemiteIme(self.adb)
        self.recorder = Recorder(self.adb)
        self._register_rotation_watcher()

        self._touch_proxy = None
Beispiel #5
0
 def __init__(self, serialno=None, host=None,
              cap_method=CAP_METHOD.MINICAP_STREAM,
              touch_method=TOUCH_METHOD.MINITOUCH,
              ime_method=IME_METHOD.YOSEMITEIME,
              ori_method=ORI_METHOD.MINICAP,
              ):
     super(Android, self).__init__()
     self.serialno = serialno or self.get_default_device()
     self.cap_method = cap_method.upper()
     self.touch_method = touch_method.upper()
     self.ime_method = ime_method.upper()
     self.ori_method = ori_method.upper()
     # init adb
     self.adb = ADB(self.serialno, server_addr=host)
     self.adb.wait_for_device()
     self.sdk_version = self.adb.sdk_version
     self._display_info = {}
     self._current_orientation = None
     # init components
     self.rotation_watcher = RotationWatcher(self.adb)
     self.minicap = Minicap(self.adb, ori_function=self.get_display_info)
     self.javacap = Javacap(self.adb)
     self.minitouch = Minitouch(self.adb, ori_function=self.get_display_info)
     self.yosemite_ime = YosemiteIme(self.adb)
     self.recorder = Recorder(self.adb)
     self._register_rotation_watcher()
def cancel_handler(signal, frame):
    ST.MANUAL_CANCEL = True
    logger.info('人工终止')
    if G:
        ADB().disconnect()
    ADB().kill_server()
    sys.exit(0)
Beispiel #7
0
def install_apk(dev_obj,apkPath,package_name):
	#wake up 
	dev_obj.wake()
	dev_obj.home()
	fileList = os.listdir(apkPath)
	ADB(dev_obj.uuid).install_app(f"{apkPath}/{str(fileList[0])}", replace=True, install_options=["-d", "-g"])
	ADB(dev_obj.uuid).start_app(package_name)
	time.sleep(3)  #等待启动首页广告加载完成。   要不然monkey全部点着广告在玩
Beispiel #8
0
 def adb_devices(self):
     """
     获取手机设备号
     :return:
     """
     adb = ADB()
     if not adb.devices():
         raise IndexError('not devices found')
     return adb.devices()
Beispiel #9
0
    def run(self):
        devices = [d[0] for d in ADB().devices()][0]
        adb = ADB(devices)
        mini_cap_ = Minicap(adb,
                            (360, 640))  # 指定projection,未指定会按照默认的分辨率(图片大,延迟高)
        datas = mini_cap_.get_stream(
            lazy=True)  # 返回一个可迭代对象,mini_cup返回最新的一帧画面的流

        for data in datas:
            self.frame_info.emit(data)
Beispiel #10
0
 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
Beispiel #11
0
def connect_device_serialno(serialno):
    device_adb = ADB(serialno)
    ip = device_adb.get_ip_address()
    # 用adb tcpip模式重启adb
    device_adb.cmd(['tcpip',ADB_PORT[1:]])
    device = connect_device_ip(ip)
    if(device):
        device['id'] = serialno
        return device
    return None
Beispiel #12
0
def get_serialno(ip):
    devices = get_on_devices()
    for device in devices:
        if(not is_ip_device(device)):
            # USB连接 获取ip
            device_adb = ADB(device)
            device_ip = device_adb.get_ip_address()
            if(ip == device_ip):
                return device
    return None
Beispiel #13
0
 def getDevice(self):
     adbList = [i for i, j in ADB().devices() if j == 'device']
     text, ok = QInputDialog.getItem(
         self, '选取设备', '在下拉列表中选择一个设备', adbList,
         adbList.index(fgoFunc.base.serialno) if fgoFunc.base.serialno
         and fgoFunc.base.serialno in adbList else 0, True,
         Qt.WindowFlags.WindowStaysOnTopHint)
     if ok and text:
         if text not in adbList: ADB(text)
         if text != fgoFunc.base.serialno: fgoFunc.base = fgoFunc.Base(text)
         self.ui.LBL_DEVICE.setText(fgoFunc.base.serialno)
Beispiel #14
0
    def get_default_device(self):
        """
        Get local default device when no serailno

        Returns:
            local device serialno

        """
        if not ADB().devices(state="device"):
            raise IndexError("ADB devices not found")
        return ADB().devices(state="device")[0][0]
Beispiel #15
0
 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()
Beispiel #16
0
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])
Beispiel #17
0
def get_usb_devices():
    devices = get_on_devices()
    ret_devices = []
    for device in devices:
        if is_ip_device(device)==False:
            # USB连接 获取ip
            device_adb = ADB(device)
            ip = device_adb.get_ip_address()
            try:
                devices.index(ip+ADB_PORT)
            except:
                ret_devices.append(device)
    return ret_devices
Beispiel #18
0
def connect_all():
    devices= get_usb_devices()
    device_infos = []
    for device in devices:
        device_adb = ADB(device)
        ip = device_adb.get_ip_address()
        # 用adb tcpip模式重启adb
        device_adb.cmd(['tcpip',ADB_PORT[1:]])
        device_info = adb_ip_connect(ip)
        if(device_info):
            device_info['id'] = device
            device_infos.append(device_info)
    return device_infos
Beispiel #19
0
    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()
Beispiel #20
0
def wakeup_item():
    ADB(SERIALNO).keyevent('224')
    ADB(SERIALNO).swipe((300, 1000), (300, 500))
    try:
        # ADB(SERIALNO).push(r'C:\uitest\mobile\webtool\static\item\test.png', ADB_PIC_URL)#测试电脑路径
        # ADB(SERIALNO).push(
        #     r'C:\Users\Guchao\Desktop\pr\uitest_project\ui_test_project\mobile\webtool\static\item\test.png',
        #     ADB_PIC_URL)  # 顾超电脑路径
        # 陈羽的电脑
        ADB(SERIALNO).push(r' D:\ui_test\ui_test_project - master\mobile\webtool\static\trade', '/sdcard/Pictures')
        ADB(SERIALNO).shell(ADB_SCAN_FILE)
    except Exception as e:
        print(e)
        return False
Beispiel #21
0
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()
Beispiel #22
0
    def __init__(self):
        self.adb = ADB()
        self.tk = tk.Tk()
        self.tk.title(s.title)
        # self.icon = tk.PhotoImage(file=resource_path("image/gui/sora.png"))
        self.tk.iconbitmap(resource_path("image/gui/sora.ico"))
        # self.tk.geometry('500x300')
        self.status = Status(self)

        # menu bar
        self.menu_bar = MenuBar(self)
        self.tk.config(menu=self.menu_bar.tk)

        # bottom bar
        self.bottom_bar = BottomBarFrame(self)
        self.bottom_bar.pack(side=tk.BOTTOM, fill=tk.BOTH)
        self.update_devices = self.bottom_bar.update_devices

        # custom task list
        self.custom_task = CustomTaskFrame(self)
        self.custom_task.pack(side=tk.LEFT, fill=tk.BOTH)

        # inner child task list
        self.task = TaskFrame(self)
        self.task.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        # init
        self.update_devices()
        self.status.set_status(Status.READY)
Beispiel #23
0
 def getDevice(self):
     text, ok = (lambda adbList: QInputDialog.getItem(
         self, '选取设备', '在下拉列表中选择一个设备', adbList,
         adbList.index(self.serialno) if self.serialno and self.serialno in
         adbList else 0, True, Qt.WindowStaysOnTopHint))(
             [i for i, j in ADB().devices() if j == 'device'])
     if ok: self.serialno = text
Beispiel #24
0
 def getDevice(self):
     text, ok = (lambda adbList: QInputDialog.getItem(
         self, '更改安卓设备', '在下拉列表中选择', adbList,
         adbList.index(self.serialno)
         if self.serialno and self.serialno in adbList else 0))(
             [i for i, j in ADB().devices() if j == 'device'])
     if ok and text: self.serialno = text
Beispiel #25
0
def run(func, apk_path, target_device: list = None):
    """
    程序主入口(多机运行)

    :param func:
    :param apk_path:
    :param target_device: 如果未指定,则运行在所有在线设备上
    :return:
    """

    # 添加类型转换,防止传参错误
    if target_device:
        target_device = list(target_device)

    # 获取在线设备
    devices = [dev[0] for dev in ADB().devices()
               ] if not target_device else target_device

    # todo: 进程数量可以用在线设备数关联,如果在线设备数量 > 20 则用常量值,否则用在线设备数
    with concurrent.futures.ProcessPoolExecutor(max_workers=3) as executor:
        futures = [executor.submit(func, uuid, apk_path) for uuid in devices]

        for future in concurrent.futures.as_completed(futures):
            try:
                uuid, ret = future.result()
            except Exception as e:
                logger.info("generated an exception: {0}".format(e))
                logger.info("测试出错请检查")
            else:
                if ret:
                    results["tests"][uuid] = ret
                else:
                    logger.info("测试出错请检查")

    run_summary(results)
Beispiel #26
0
 def getDevice(self):
     text, ok = (lambda adbList: QInputDialog.getItem(
         self, '更改安卓设备', '在下拉列表中选择一个设备', adbList,
         adbList.index(self.serial)
         if self.serial and self.serial in adbList else 0))(
             [i for i, j in ADB().devices() if j == 'device'])
     #text,ok=QInputDialog.getText(self,'更改安卓设备','填写',text='emulator-5554')
     if ok and text: self.serial = text
Beispiel #27
0
def get_on_devices():
    devices = ADB().devices()
    on_devices = []
    for device in devices:
        serialno,status = device
        if status=="device":
            on_devices.append(serialno)
    return on_devices
Beispiel #28
0
    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'没发现手机设备')
Beispiel #29
0
 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
Beispiel #30
0
 def getDevice(self):
     text, ok = (lambda adbList: QInputDialog.getItem(
         self, '选取设备', '在下拉列表中选择一个设备', adbList,
         adbList.index(fgoFunc.base.serialno)
         if fgoFunc.base.serialno and fgoFunc.base.serialno in adbList else
         0, True, Qt.WindowStaysOnTopHint))(
             [i for i, j in ADB().devices() if j == 'device'])
     if ok and text and text != fgoFunc.base.serialno:
         fgoFunc.base = fgoFunc.Base(text)