예제 #1
0
    def initDriver(self):
        if self._hasInit:
            return

        self._urlFetcher = WxWebSocketDebugUrlFetcher(device=self._device)
        url = self._urlFetcher.fetchWebSocketDebugUrl()

        dirPath = os.path.split(os.path.realpath(__file__))[0]
        PLUG_SRC = os.path.join(dirPath, 'apk', 'inputPlug.apk')
        if not AdbHelper.hasApkInstalled(packageName='com.tencent.fat.wxinputplug'):
            AdbHelper.installApk(PLUG_SRC, device=self._device, installOverride=True)
            self.logger.info('install ---> ' + PLUG_SRC)
        self._vmShutdownHandler.registerToVM()
        UncaughtExceptionHandler.init()
        UncaughtExceptionHandler.registerUncaughtExceptionCallback(self._onUncaughtException)

        self._selectDevice()

        self._webSocketDataTransfer = WebSocketDataTransfer(url=url)
        self._networkHandler = ShortLiveWebSocket(self._webSocketDataTransfer, self._executor, self)
        self._networkHandler.connect()
        self._executor.put(self._networkHandler.receive)

        self.initPageDisplayData()
        self._hasInit = True
예제 #2
0
    def _fetchWeixinToolsProcessPid(device=None):
        osName = OS.getPlatform()
        cmd = _ADB_GET_TOP_ACTIVITY_CMD[osName]
        stdout, stdError = runCommand(AdbHelper.specifyDeviceOnCmd(
            cmd, device))
        print "fetchWeixinToolsProcessActivity:\n", stdout
        mmActivity = stdout.split('com.tencent.mm/')
        pid = 0
        for activity in mmActivity:
            if '.plugin.appbrand.ui.AppBrandInToolsUI' in activity:
                # 小米
                strlist = activity.split('pid=')
                pid = strlist[1].split("\r\n")[0]
                break
            elif '.plugin.appbrand.ui.AppBrandUI' in activity:
                # VIVO
                strlist = activity.split('pid=')
                pid = strlist[1].split("\r\n")[0]
                break
        webviewCmd = _ADB_GET_WEBVIEW_TOOLS_CMD[osName] % (pid)
        print "pid:", pid

        if pid == 0:  # 维持原有逻辑
            strlist = stdout.split('pid=')
            pid = strlist[1].split("\r\n")[0]

        # 验证是否启动了小程序webview
        try:
            webStdout, webStdError = runCommand(
                AdbHelper.specifyDeviceOnCmd(webviewCmd, device))
        except:
            errorMsg = ErrorMsgManager().errorCodeToString(
                ERROR_CODE_NOT_ENTER_XCX)
            raise RuntimeError(errorMsg)
        return pid
예제 #3
0
    def _fetchWeixinToolsProcessPid(device=None):
        osName = OS.getPlatform()
        cmd = _ADB_GET_TOP_ACTIVITY_CMD[osName]
        stdout, stdError = runCommand(AdbHelper.specifyDeviceOnCmd(cmd, device))
        strlist = stdout.split('pid=')
        pid = strlist[1].split("\r\n")[0]
        webviewCmd = _ADB_GET_WEBVIEW_TOOLS_CMD[osName] % (pid)

        # 验证是否启动了小程序webview
        try:
            webStdout, webStdError = runCommand(AdbHelper.specifyDeviceOnCmd(webviewCmd, device))
        except:
            errorMsg = ErrorMsgManager().errorCodeToString(ERROR_CODE_NOT_ENTER_XCX)
            raise RuntimeError(errorMsg)
        return pid
 def _getProcessInfo(cmd, device):
     nums = 0
     retry = True
     stdout = ''
     while (retry and nums < 8):
         try:
             stdout, stdError = runCommand(AdbHelper.specifyDeviceOnCmd(cmd, device))
             retry = False
         except:
             nums = nums + 1
             time.sleep(1)
             Log().getLogger().debug('open port mapping ---> retry ' + str(nums))
     return stdout
예제 #5
0
    def _selectDevice(self):
        devicesList = AdbHelper.listDevices(ignoreUnconnectedDevices=True)
        # 假如没有指定设备,那么判断当前机器是否连接1个设备
        if self._device is None:
            devicesCount = len(devicesList)
            errorMsg = None

            if devicesCount <= 0:
                errorMsg = ErrorMsgManager().errorCodeToString(ERROR_CODE_DEVICE_NOT_CONNECT)

            elif devicesCount == 1:
                self._device = devicesList[0]

            else:
                errorMsg = ErrorMsgManager().errorCodeToString(ERROR_CODE_MULTIPLE_DEVICE)

            if errorMsg is not None:
                raise RuntimeError(errorMsg)
 def _forwardLocalPort(localPort, pid, device=None):
     cmd = "adb forward tcp:%s localabstract:webview_devtools_remote_%s" % (
         localPort, pid)
     runCommand(AdbHelper.specifyDeviceOnCmd(cmd, device))