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
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
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
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))