最新消息:20210917 已从crifan.com换到crifan.org

【已解决】整理和优化facebook-wda的app管理相关通用功能和函数

优化 crifan 332浏览 0评论
折腾:
【未解决】iOS自动化操作设置出错:启动设置后找不到无线局域网
期间,遇到很多facebook-wda的相关api的调用。
然后去把通用部分的功能,整理出来,供后续使用。
优化和添加函数:
    def iOSTerminateApp(self, appBundleId):
        """terminal iOS app


        Args:
            appBundleId (str): iOS app bundle id
        Returns:
            bool, dict/str:
                true, None
                false, str: error message
        Raises:
        """
        isTerminalOk = False
        respInfo = None
        # self.wdaClient.session().app_terminate(appBundleId)
        # self.wdaClient().app_terminate(appBundleId)
        resp = self.wdaClient.app_terminate(appBundleId)
        logging.info("app_terminate resp=%s", resp)
        respStatus = resp.status
        respValue = resp.value
        respSessionId = resp.sessionId
        logging.info("respStatus=%s, respValue=%s, respSessionId", respStatus, respValue, respSessionId)
        if respStatus == 0:
            isTerminalOk = True
            respInfo = None
        else:
            errInfo = {
                "status": respStatus,
                "value": respValue,
            }
            respInfo = errInfo
        return isTerminalOk, respInfo
以及继续优化为:
    def iOSTerminateApp(self, appBundleId):
        """Terminate iOS app


        Args:
            appBundleId (str): iOS app bundle id
        Returns:
            bool, dict/str:
                true, None
                false, str: error message
        Raises:
        """
        isTerminalOk = False
        respInfo = None
        # self.wdaClient.session().app_terminate(appBundleId)
        # self.wdaClient().app_terminate(appBundleId)
        resp = self.wdaClient.app_terminate(appBundleId)
        logging.info("app_terminate resp=%s", resp)
        # respStatus = resp.status
        # respValue = resp.value
        # respSessionId = resp.sessionId
        # logging.info("respStatus=%s, respValue=%s, respSessionId", respStatus, respValue, respSessionId)
        # if respStatus == 0:
        #     isTerminalOk = True
        #     respInfo = None
        # else:
        #     errInfo = {
        #         "status": respStatus,
        #         "value": respValue,
        #     }
        #     respInfo = errInfo
        isTerminalOk, respInfo = self.processWdaResponse(resp)
        return isTerminalOk, respInfo


    def processWdaResponse(self, wdaResponse):
        """Process common wda (http post) response


        Args:
        Returns:
            bool, ?/dict:
                true, response value
                false, error info dict
        Raises:
        """
        isRespOk = False
        respInfo = None
        logging.debug("wdaResponse=%s", wdaResponse)
        respStatus = wdaResponse.status
        respValue = wdaResponse.value
        respSessionId = wdaResponse.sessionId
        logging.debug("respStatus=%s, respValue=%s, respSessionId", respStatus, respValue, respSessionId)
        if respStatus == 0:
            isRespOk = True
            respInfo = respValue
        else:
            isRespOk = False
            errInfo = {
                "status": respStatus,
                "value": respValue,
                "sessionId": respSessionId,
            }
            respInfo = errInfo
        return isRespOk, respInfo
再去把iOSGetAppState也改为上述写法
    def iOSGetAppState(self, appBundleId):
        """get iOS app state


        Args:
            appBundleId (str): iOS app bundle id
        Returns:
            bool, enum/dict:
                true, app status enum
                false, error info dict
        Raises:
        """
        curAppState = self.wdaClient.app_state(appBundleId)
        logging.debug("curAppState=%s", curAppState)
        """
        {
            "value" : 4,
            "sessionId" : "5BBD460B-F420-461D-A5E3-244A74CDF5CE"
        }
        """
        # # <GenericDict, len() = 3>
        # # curAppStateValue = curAppState[0]
        # # curAppStatus = curAppState.status
        # # curAppSessionId = curAppState.sessionId
        # # logging.debug("curAppStatus=%s, curAppSessionId=%s", curAppStatus, curAppSessionId)
        # curAppStateValue = curAppState.value
        # logging.debug("curAppStateValue=%s", curAppStateValue)
        # curStateEnum = ApplicationState(curAppStateValue)
        # logging.debug("curStateEnum=%s", curStateEnum)
        # return curStateEnum
        isGetOk, respInfo = self.processWdaResponse(curAppState)
        if isGetOk:
            respValue = respInfo
            curStateEnum = ApplicationState(respValue)
            logging.debug("curStateEnum=%s", curStateEnum)
            respInfo = curStateEnum
        return isGetOk, respInfo
然后去调试
调用:
        isGetOk, curState = self.iOSGetAppState(iOS_AppId_Settings)
        logging.info("before terminal: curState=%s", curState)
        # stop before start to avoid current page is not homepage of 设置
        isTerminalOk, respInfo = self.iOSTerminateApp(iOS_AppId_Settings)
        logging.info("isTerminalOk=%s, respInfo=%s", isTerminalOk, respInfo)
        isGetOk, curState = self.iOSGetAppState(iOS_AppId_Settings)
        logging.info("after terminal: curState=%s", curState)
去调试

[200611 15:51:59][DevicesMethods.py 2600] app_terminate resp=GenericDict(value=False, sessionId='79A39B72-F5F9-4A01-8E58-DD380452350A', status=0)
[200611 xxx][DevicesMethods.py 2667] isTerminalOk=True, respInfo=False
没有运行设置时,去terminate,会返回value是false
有运行 设置时,去terminate,返回value是True
再去把:
        launchResult = self.wdaClient.app_launch(iOS_AppId_Settings)
        logging.debug("launchResult=%s", launchResult)
launch启动,也改为:
    def iOSLaunchApp(self, appBundleId):
        """Launch iOS app


        Args:
            appBundleId (str): iOS app bundle id
        Returns:
            bool, None/str:
                true, None
                false, str: error message
        Raises:
        """
        launchResp = self.wdaClient.app_launch(appBundleId)
        logging.debug("launchResp=%s", launchResp)
        isLaunchOk, respInfo = self.processWdaResponse(launchResp)
        return isLaunchOk, respInfo
调用
        isLaunchOk, respInfo = self.iOSLaunchApp(iOS_AppId_Settings)
        logging.info("isLaunchOk=%s, respInfo=%s", isLaunchOk, respInfo)
是可以的。
【总结】
此处,把相关的facebook-wda的app管理的函数整理如下:
    def iOSGetAppState(self, appBundleId):
        """get iOS app state


        Args:
            appBundleId (str): iOS app bundle id
        Returns:
            bool, enum/dict:
                true, app status enum
                false, error info dict
        Raises:
        """
        curAppState = self.wdaClient.app_state(appBundleId)
        logging.debug("curAppState=%s", curAppState)
        """
        {
            "value" : 4,
            "sessionId" : "5BBD460B-F420-461D-A5E3-244A74CDF5CE"
        }
        """
        # # <GenericDict, len() = 3>
        # # curAppStateValue = curAppState[0]
        # # curAppStatus = curAppState.status
        # # curAppSessionId = curAppState.sessionId
        # # logging.debug("curAppStatus=%s, curAppSessionId=%s", curAppStatus, curAppSessionId)
        # curAppStateValue = curAppState.value
        # logging.debug("curAppStateValue=%s", curAppStateValue)
        # curStateEnum = ApplicationState(curAppStateValue)
        # logging.debug("curStateEnum=%s", curStateEnum)
        # return curStateEnum
        isGetOk, respInfo = self.processWdaResponse(curAppState)
        if isGetOk:
            respValue = respInfo
            curStateEnum = ApplicationState(respValue)
            logging.debug("curStateEnum=%s", curStateEnum)
            respInfo = curStateEnum
        return isGetOk, respInfo


    def iOSTerminateApp(self, appBundleId):
        """Terminate iOS app


        Args:
            appBundleId (str): iOS app bundle id
        Returns:
            bool, bool/str:
                true, bool
                    True: terminal Ok
                    False: terminal fail
                        eg: current not running 设置, if terminal, return False
                false, str: error message
        Raises:
        """
        # isTerminalOk = False
        # respInfo = None
        # self.wdaClient.session().app_terminate(appBundleId)
        # self.wdaClient().app_terminate(appBundleId)
        terminateResp = self.wdaClient.app_terminate(appBundleId)
        logging.debug("terminateResp=%s", terminateResp)
        # respStatus = resp.status
        # respValue = resp.value
        # respSessionId = resp.sessionId
        # logging.info("respStatus=%s, respValue=%s, respSessionId", respStatus, respValue, respSessionId)
        # if respStatus == 0:
        #     isTerminalOk = True
        #     respInfo = None
        # else:
        #     errInfo = {
        #         "status": respStatus,
        #         "value": respValue,
        #     }
        #     respInfo = errInfo
        isTerminalOk, respInfo = self.processWdaResponse(terminateResp)
        return isTerminalOk, respInfo


    def iOSLaunchApp(self, appBundleId):
        """Launch iOS app


        Args:
            appBundleId (str): iOS app bundle id
        Returns:
            bool, None/str:
                true, None
                false, str: error message
        Raises:
        """
        launchResp = self.wdaClient.app_launch(appBundleId)
        logging.debug("launchResp=%s", launchResp)
        isLaunchOk, respInfo = self.processWdaResponse(launchResp)
        return isLaunchOk, respInfo


    def processWdaResponse(self, wdaResponse):
        """Process common wda (http post) response


        Args:
        Returns:
            bool, ?/dict:
                true, response value
                false, error info dict
        Raises:
        """
        isRespOk = False
        respInfo = None
        logging.debug("wdaResponse=%s", wdaResponse)
        respStatus = wdaResponse.status
        respValue = wdaResponse.value
        respSessionId = wdaResponse.sessionId
        logging.debug("respStatus=%s, respValue=%s, respSessionId", respStatus, respValue, respSessionId)
        if respStatus == 0:
            isRespOk = True
            respInfo = respValue
        else:
            isRespOk = False
            errInfo = {
                "status": respStatus,
                "value": respValue,
                "sessionId": respSessionId,
            }
            respInfo = errInfo
        return isRespOk, respInfo
相关调用:
        isGetOk, curState = self.iOSGetAppState(iOS_AppId_Settings)
        logging.info("before terminal: curState=%s", curState)
        # stop before start to avoid current page is not homepage of 设置
        isTerminalOk, respInfo = self.iOSTerminateApp(iOS_AppId_Settings)
        logging.info("isTerminalOk=%s, respInfo=%s", isTerminalOk, respInfo)
        isGetOk, curState = self.iOSGetAppState(iOS_AppId_Settings)
        logging.info("after terminal: curState=%s", curState)

        # settingsSession = self.wdaClient.session(iOS_AppId_Settings)
        # logging.debug("settingsSession=%s" % settingsSession)
        # launchResult = self.wdaClient.app_launch(iOS_AppId_Settings)
        # logging.debug("launchResult=%s", launchResult)
        isLaunchOk, respInfo = self.iOSLaunchApp(iOS_AppId_Settings)
        logging.info("isLaunchOk=%s, respInfo=%s", isLaunchOk, respInfo)
        # logging.info("launchResult: value=%s, status=%s, sessionId=%s", launchResult.value, launchResult.status, launchResult.sessionId)
        # launchResult: value=None, status=0, sessionId=79A39B72-F5F9-4A01-8E58-DD380452350A
        # logging.info("launchResult=%s", str(launchResult))
        # launchResult=GenericDict(value=None, sessionId='79A39B72-F5F9-4A01-8E58-DD380452350A', status=0)
即可。

转载请注明:在路上 » 【已解决】整理和优化facebook-wda的app管理相关通用功能和函数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
90 queries in 0.204 seconds, using 23.43MB memory