예제 #1
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
예제 #2
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
예제 #3
0
 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)
예제 #4
0
 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
예제 #6
0
    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))