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 getCPUInfo(self): ''' 获得小程序进程占用CPU信息 :return: 小程序进程占用CPU信息 ''' self.logger.info('') ADB_SHELL = 'adb shell ' if self._device: ADB_SHELL = ADB_SHELL.replace("adb", "adb -s %s" % self._device) GET_CPU_INFO = ADB_SHELL + ' top -n 1 | grep com.tencent.mm:appbrand0' return commandHelper.runCommand(GET_CPU_INFO)
def getMemoryInfo(self): ''' 获得小程序进程占用内存信息 :return: 小程序进程占用内存信息 ''' self.logger.info('') ADB_SHELL = 'adb shell ' if self._device: ADB_SHELL = ADB_SHELL.replace("adb", "adb -s %s" % self._device) GET_MEMORY_INFO = ADB_SHELL + 'dumpsys meminfo com.tencent.mm:appbrand0' return commandHelper.runCommand(GET_MEMORY_INFO)
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 textElementByXpath(self, xpath, text, needClick=False): """ :param needClick:如果为true,会先对控件进行一次点击,以获得焦点 输入前会先保存当前默认的输入法 然后将输入法切换到adb插件 输入中文,输入后讲输入法转换回默认输入发 needClick代表是否需要先对xpath的控件进行一次点击 """ self.logger.info('xpath ---> ' + xpath + ' text ---> ' + text) if needClick: self.clickElementByXpath(xpath, byUiAutomator=True) if self.isElementExist(xpath): ADB_SHELL = 'adb shell ' self.logger.debug('textElementByXpath xpath exist') if self._device: ADB_SHELL = ADB_SHELL.replace("adb", "adb -s %s" % self._device) GET_DEFAULT_INPUT_METHOD = ADB_SHELL + 'settings get secure default_input_method' SET_INPUT_METHOD = ADB_SHELL + 'ime set {0}' CHINESE_INPUT_METHOD = 'com.tencent.fat.wxinputplug/.XCXIME' INPUT_TEXT = ADB_SHELL + "am broadcast -a INPUT_TEXT --es TEXT '{0}'" DEFAULT_INPUT_METHOD = commandHelper.runCommand( GET_DEFAULT_INPUT_METHOD)[0].replace("\r\n", " ") osName = OS.getPlatform() INPUT_TEXT_CMD = { "Darwin": INPUT_TEXT.format(text), "Windows": INPUT_TEXT.format(text).decode('utf-8').replace( u'\xa0', u' ').encode('GBK'), "Linux": INPUT_TEXT.format(text) } self.logger.debug(SET_INPUT_METHOD.format(CHINESE_INPUT_METHOD)) commandHelper.runCommand( SET_INPUT_METHOD.format(CHINESE_INPUT_METHOD)) self.clickElementByXpath(xpath) self.wait(WAIT_REFLESH_05_SECOND) self.logger.debug(INPUT_TEXT_CMD.get(osName)) commandHelper.runCommand(INPUT_TEXT_CMD.get(osName)) self.logger.debug(SET_INPUT_METHOD.format(DEFAULT_INPUT_METHOD)) commandHelper.runCommand( SET_INPUT_METHOD.format(DEFAULT_INPUT_METHOD)) self.wait(WAIT_REFLESH_05_SECOND)
def _forwardLocalPort(localPort, pid, device=None): cmd = "adb forward tcp:%s localabstract:webview_devtools_remote_%s" % ( localPort, pid) runCommand(AdbHelper.specifyDeviceOnCmd(cmd, device))