コード例 #1
0
ファイル: Pages.py プロジェクト: tachibana814/appium
class PagesObjects:
    '''
    page层
    kwargs: WebDriver driver, String path(yaml配置参数)
    isOperate: 操作失败,检查点就失败
    testInfo:
    testCase:
    '''

    def __init__(self, **kwargs):
        self.driver = kwargs["driver"]
        if kwargs.get("launch_app", "0") == "0":  # 若为空,重新打开app
            self.driver.launch_app()
        self.path = kwargs["path"]
        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        test_msg = getYam(self.path)
        self.testInfo = test_msg["testinfo"]
        self.testCase = test_msg["testcase"]
        self.testcheck = test_msg["check"]
        self.get_value = []
        self.is_get = False  # 检查点特殊标志,结合get_value使用。若为真,说明检查点要对比历史数据和实际数据
        self.msg = ""

    '''
     操作步骤
     logTest 日记记录器
    '''

    def operate(self, logTest):
        for item in self.testCase:
            m_s_g = self.msg + "\n" if self.msg != "" else ""
            result = self.operateElement.operate(item, self.testInfo, logTest)
            if not result["result"]:
                msg = "执行过程中失败,请检查元素是否存在" + item["element_info"]
                if not result.get("webview", True):
                    msg = "切换到webview失败,请确定是否在webview页面"
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False
            if item.get("is_time", "0") != "0":
                time.sleep(item["is_time"])  # 等待时间
                print("--等待下---")

            if item.get("operate_type", "0") == be.GET_VALUE or item.get("operate_type", "0") == be.GET_CONTENT_DESC :
                self.get_value.append(result["text"])
                self.is_get = True  # 对比数据

        return True

    def checkPoint(self, **kwargs):
        result = self.check(**kwargs)
        if result is not True and be.RE_CONNECT:
            self.msg = "用例失败重连过一次,失败原因:" + self.testInfo[0]["msg"]
            kwargs["logTest"].buildStartLine(kwargs["caseName"]+"_失败重连")  # 记录日志
            self.operateElement.switchToNative()
            self.driver.launch_app()
            self.isOperate = True
            self.get_value = []
            self.is_get = False
            self.operate(kwargs["logTest"])
            result = self.check(**kwargs)
            self.testInfo[0]["msg"] = self.msg
        self.operateElement.switchToNative()
        countSum(result)
        countInfo(result=result, testInfo=self.testInfo, caseName=kwargs["caseName"],
                  driver=self.driver, logTest=kwargs["logTest"], devices=kwargs["devices"], testCase=self.testCase,
                  testCheck=self.testcheck)
        return result

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary:相反检查点,传1表示如果检查元素存在就说明失败
    toast: 表示提示框检查点
    contrary_getval: 相反值检查点,如果对比成功,说明失败
    check: 自定义检查结果
    excepts: 如果为1,表示操作出现异常情况检查点为成功
    
    '''

    def check(self, **kwargs):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 如果有重跑机制,成功后会默认把日志传进来
        # if kwargs.get("check", "0") != "0":
        #     return kwargs["check"]

        if self.isOperate:
            for item in self.testcheck:
                if kwargs.get("toast", "0") != "0":
                    resp = self.operateElement.toast(item["element_info"], testInfo=self.testInfo,
                                                     logTest=kwargs["logTest"])
                else:
                    resp = self.operateElement.operate(item, self.testInfo, kwargs["logTest"])

                if kwargs.get("excepts", "0") != "0" and not resp["result"]:
                    print("操作失败,简单点为成功")
                    result = True
                    break

                if kwargs.get("contrary", "0") != "0" and resp["result"]:
                    m = "请检查%s" % item["info"] + "是否成功"
                    self.msg = m_s_g + m
                    print(self.msg)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("contrary", "0") == "0" and not resp["result"]:
                    m = "请检查元素" + item["element_info"] + "是否存在"
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break

                if kwargs.get("contrary_getval", "0") != "0" and self.is_get and resp["result"] in self.get_value:
                    result = False
                    m = "对比数据失败,当前取到到数据为:%s,历史取到数据为:%s" % resp["text"] % self.get_value
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    break

                if kwargs.get("contrary_getval",
                              "0") == "0" and self.is_get and resp["text"] not in self.get_value:  # 历史数据和实际数据对比
                    result = False
                    m = "对比数据失败,获取历史数据为:" + ".".join(self.get_value) + ",当前获取的数据为:" + resp["text"]
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    break
        else:
            result = False
        return result
コード例 #2
0
ファイル: Pages.py プロジェクト: wsaicyj/AppiumAuto
class PagesObjects:
    '''
    page层
    kwargs: WebDriver driver, String path(yaml配置参数)
    isOperate: 操作失败,检查点就失败
    testInfo:
    testCase:
    '''

    def __init__(self, kwargs):
        self.driver = kwargs["driver"]
        # if kwargs.get("launch_app", "0") == "0":  # 若为空,重新打开app
        #     self.driver.launch_app()
        # self.path = kwargs["path"]
        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        self.test_msg = kwargs["test_msg"]
        self.testInfo = self.test_msg[1]["testinfo"]
        self.testCase = self.test_msg[1]["testcase"]
        self.testcheck = self.test_msg[1]["check"]
        self.device = kwargs["device"]
        self.logTest = kwargs["logTest"]
        self.caseName = kwargs["caseName"]
        self.get_value = []
        self.is_get = False  # 检查点特殊标志,结合get_value使用。若为真,说明检查点要对比历史数据和实际数据
        self.msg = ""


    def operate(self):
        '''
        操作步骤
        '''
        if self.test_msg[0] is False: # 如果用例编写错误
            self.isOperate = False
            return False
        for item in self.testCase:
            m_s_g = self.msg + "\n" if self.msg != "" else ""

            if item.get("is_time", "0") != "0":
                print("--等待%s秒---" % item["is_time"])
                time.sleep(item["is_time"])  # 等待时间

            result = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)
            if not result["result"]:
                msg = "执行过程中失败,请检查%s元素是否存在,%s" % (item["element_info"], result.get("text", " "))
                if not result.get("webview", True):
                    msg = "切换到webview失败,请确定是否在webview页面"
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False

            if item.get("operate_type", "0") == be.GET_VALUE or item.get("operate_type", "0") == be.GET_CONTENT_DESC:
                self.get_value.append(result["text"])
                self.is_get = True  # 对比数据

        return True

    def checkPoint(self, kwargs={}):
        result = self.check(kwargs)
        if self.test_msg[0] is not False:  # 如果用例编写正确
            if result is not True and be.RE_CONNECT:
                self.msg = "用例失败重连过一次,失败原因:%s" % self.testInfo[0]["msg"]
                self.logTest.buildStartLine(self.caseName + "_失败重连")  # 记录日志
                self.operateElement.switchToNative()
                self.driver.launch_app()
                self.isOperate = True
                self.get_value = []
                self.is_get = False
                self.operate()
                result = self.check(kwargs)
                self.testInfo[0]["msg"] = self.msg
            self.operateElement.switchToNative()

        statistics_result(result=result, testInfo=self.testInfo, caseName=self.caseName,
                          driver=self.driver, logTest=self.logTest, devices=self.device,
                          testCase=self.testCase,
                          testCheck=self.testcheck)


    def check(self, kwargs):
        '''
        检查点
        caseName:测试用例函数名 用作统计
        logTest: 日志记录
        devices 设备名
        contrary:相反检查点,传1表示如果检查元素存在就说明失败
        toast: 表示提示框检查点
        contrary_getval: 相反值检查点,如果对比成功,说明失败
        check_point: 自定义检查结果
        '''
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 如果有重跑机制,成功后会默认把日志传进来


        # if kwargs.get("check_point", "0") != "0": 自定义检查点
        #     return kwargs["check_point"]

        if self.isOperate:
            for item in self.testcheck:
                if kwargs.get("check", be.DEFAULT_CHECK) == be.TOAST:
                    result = \
                    self.operateElement.toast(item["element_info"], testInfo=self.testInfo, logTest=self.logTest)[
                        "result"]
                    if result is False:
                        m = get_error(
                            {"type": be.DEFAULT_CHECK, "element_info": item["element_info"], "info": item["info"]})
                        self.msg = m_s_g + m
                        print(m)
                        self.testInfo[0]["msg"] = m
                    break
                else:
                    resp = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)

                if kwargs.get("check", be.DEFAULT_CHECK) == be.DEFAULT_CHECK and not resp["result"]:
                    m = get_error(
                        {"type": be.DEFAULT_CHECK, "element_info": item["element_info"], "info": item["info"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check", be.DEFAULT_CHECK) == be.CONTRARY and resp["result"]:
                    m = get_error({"type": be.CONTRARY, "element_info": item["element_info"], "info": item["info"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = self.msg
                    result = False
                    break
                # 检查点关键字contrary_getval: 相反值检查点,如果对比成功,说明失败
                if kwargs.get("check", be.DEFAULT_CHECK) == be.CONTRARY_GETVAL and self.is_get and resp["result"] \
                        in self.get_value:
                    m = get_error(
                        {"type": be.CONTRARY_GETVAL, "current": item["element_info"], "history": resp["text"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check", be.DEFAULT_CHECK) == be.COMPARE and self.is_get and resp["text"] \
                        not in self.get_value:  # 历史数据和实际数据对比
                    result = False
                    m = get_error({"type": be.COMPARE, "current": item["element_info"], "history": resp["text"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    break
        else:
            result = False
        return result
コード例 #3
0
class FeedbackPage:
    '''
    滑动删除收藏
    isOperate: 操作失败,检查点就失败,kwargs: WebDriver driver, String path(yaml配置参数)
    '''
    def __init__(self, kwargs):
        self.driver = kwargs["driver"]
        if kwargs.get("launch_app", "0") == "0":  # 若为空,重新打开app
            self.driver.launch_app()
        # self.path = kwargs["path"]
        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        self.test_msg = kwargs["test_msg"]
        self.testInfo = self.test_msg[1]["testinfo"]
        self.testCase = self.test_msg[1]["testcase"]
        self.testcheck = self.test_msg[1]["check"]
        self.device = kwargs["device"]
        self.logTest = kwargs["logTest"]
        self.caseName = kwargs["caseName"]
        self.platformName = kwargs["platformName"]
        self.get_value = []
        self.is_get = False  # 检查点特殊标志,结合get_value使用。若为真,说明检查点要对比历史数据和实际数据
        self.msg = ""

    '''
     操作步骤
     logTest 日记记录器
    '''

    def get_size(self):
        """获取屏幕分辨率."""
        rect = self.driver.get_window_size()
        return rect['width'], rect['height']

    def swipe_by_ratio(self,
                       start_x,
                       start_y,
                       direction,
                       ratio,
                       duration=None):
        """
        按照屏幕比例的滑动.

        :param start_x: 起始横坐标
        :param start_y: 起始纵坐标
        :param direction: 滑动方向,只支持'up'、'down'、'left'、'right'四种方向参数
        :param ratio: 滑动距离与屏幕的比例,范围0到1
        :param duration: 滑动时间,单位ms
        :return:
        """
        direction_list = ['up', 'down', 'left', 'right']
        if direction not in direction_list:
            print('滑动方向%s不支持', direction)

        width, height = self.get_size()

        def swipe_up():
            """上滑."""
            end_y = start_y - ratio * height
            if end_y < 0:
                print('上滑距离过大')
                return False
            else:
                self.driver.swipe(start_x, start_y, start_x, end_y, duration)
            return True

        def swipe_down():
            """下滑."""
            end_y = start_y + ratio * height
            if end_y > height:
                print('下滑距离过大')
                return False
            else:
                self.driver.swipe(start_x, start_y, start_x, end_y, duration)
            return True

        def swipe_left():
            """左滑."""
            end_x = start_x - ratio * width
            if end_x < 0:
                print('左滑距离过大')
                return False
            else:
                self.driver.swipe(start_x, start_y, end_x, start_y, duration)
            return True

        def swipe_right():
            """右滑."""
            end_x = start_x + ratio * width
            if end_x > width:
                print('右滑距离过大')
                return False
            else:
                self.driver.swipe(start_x, start_y, end_x, start_y, duration)
            return True

        swipe_dict = {
            'up': swipe_up,
            'down': swipe_down,
            'left': swipe_left,
            'right': swipe_right
        }
        return swipe_dict[direction]()

    def operate(self):
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        for item in self.testCase:
            result = self.operateElement.operate(item, self.testInfo,
                                                 self.logTest, self.device)
            if not result["result"]:
                msg = "执行过程中失败,请检查元素是否存在" + item["element_info"]
                print(msg)
                self.testInfo[0]["msg"] = msg
                self.msg = m_s_g + msg
                self.isOperate = False
                return False

            if item.get("operate_type", "0") == be.SWIPE_UP:  # 根据元素上滑动
                width, height = self.get_size()
                start_x = width // 2
                start_bottom = height - height // 8
                el_up = self.driver.find_elements_by_id(item["element_info"])
                while True:
                    try:
                        el_up.click()
                        break
                    except:
                        self.swipe_by_ratio(start_x, start_bottom, 'up', 0.5,
                                            500)

            if item.get("operate_type", "0") == be.GET_VALUE:
                self.get_value.append(result["text"])
        return True

    def checkPoint(self, kwargs={}):
        result = self.check(kwargs)
        if self.test_msg[0] is not False:  # 如果用例编写正确
            if result is not True and be.RE_CONNECT:
                self.msg = "用例失败并重连过一次,失败原因:" + self.testInfo[0]["msg"]
                self.logTest.buildStartLine(self.caseName + "_失败重连")  # 记录日志
                # self.operateElement.switchToNative()
                self.driver.launch_app()
                self.isOperate = True
                self.get_value = []
                self.is_get = False
                self.operate()
                result = self.check(kwargs)
                self.testInfo[0]["msg"] = self.msg

        statistics_result(result=result,
                          testInfo=self.testInfo,
                          caseName=self.caseName,
                          driver=self.driver,
                          logTest=self.logTest,
                          devices=self.device,
                          testCase=self.testCase,
                          platformName=self.platformName,
                          testCheck=self.testcheck)

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary:相反检查点,传1表示如果检查元素存在就说明失败
    toast: 表示提示框检查点
    contrary_getval: 相反值检查点,如果对比成功,说明失败
    check_point: 自定义检查结果    
    '''

    def check(self, kwargs):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 如果有重跑机制,成功后会默认把日志传进来

        # if kwargs.get("check_point", "0") != "0": 自定义检查点
        #     return kwargs["check_point"]

        if self.isOperate:
            for item in self.testcheck:
                # toast检查,存在则说明成功
                if kwargs.get("check", be.DEFAULT_CHECK) == be.TOAST:
                    result = \
                    self.operateElement.toast(item["element_info"], testInfo=self.testInfo, logTest=self.logTest)[
                        "result"]
                    if result is False:
                        m = get_error({
                            "type": be.DEFAULT_CHECK,
                            "element_info": item["element_info"],
                            "info": item["info"]
                        })
                        self.msg = m_s_g + m
                        print(m)
                        self.testInfo[0]["msg"] = m
                    break
                else:
                    resp = self.operateElement.operate(item, self.testInfo,
                                                       self.logTest,
                                                       self.device)
                    # 默认检查点,就是查找页面元素
                if kwargs.get("check", be.DEFAULT_CHECK
                              ) == be.DEFAULT_CHECK and not resp["result"]:
                    m = get_error({
                        "type": be.DEFAULT_CHECK,
                        "element_info": item["element_info"],
                        "info": item["info"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                # 相反检查点,表示如果检查元素存在就说明失败,如删除后,此元素依然存在
                if kwargs.get(
                        "check",
                        be.DEFAULT_CHECK) == be.CONTRARY and resp["result"]:
                    m = get_error({
                        "type": be.CONTRARY,
                        "element_info": item["element_info"],
                        "info": item["info"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = self.msg
                    result = False
                    break
                # 检查点关键字contrary_getval: 相反值检查点,如果对比成功,说明失败
                if kwargs.get("check", be.DEFAULT_CHECK) == be.CONTRARY_GETVAL and self.is_get and resp["result"] \
                        in self.get_value:
                    m = get_error({
                        "type": be.CONTRARY_GETVAL,
                        "current": item["element_info"],
                        "history": resp["text"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                # 历史数据和实际数据对比
                if kwargs.get("check", be.DEFAULT_CHECK) == be.COMPARE and self.is_get and resp["text"] \
                        not in self.get_value:  # 历史数据和实际数据对比
                    result = False
                    m = get_error({
                        "type": be.COMPARE,
                        "current": item["element_info"],
                        "history": resp["text"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    break
        else:
            result = False
        return result
コード例 #4
0
ファイル: Pages.py プロジェクト: bingbing1123/appium
class PagesObjects:
    '''
    page层
    kwargs: WebDriver driver, String path(yaml配置参数)
    isOperate: 操作失败,检查点就失败
    testInfo:
    testCase:
    '''

    def __init__(self, kwargs):
        self.driver = kwargs["driver"]
        if kwargs.get("launch_app", "0") == "0":  # 若为空,重新打开app
            self.driver.launch_app()
        # self.path = kwargs["path"]
        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        self.test_msg = kwargs["test_msg"]
        self.testInfo = self.test_msg[1]["testinfo"]
        self.testCase = self.test_msg[1]["testcase"]
        self.testcheck = self.test_msg[1]["check"]
        self.device = kwargs["device"]
        self.logTest = kwargs["logTest"]
        self.caseName = kwargs["caseName"]
        self.get_value = []
        self.is_get = False  # 检查点特殊标志,结合get_value使用。若为真,说明检查点要对比历史数据和实际数据
        self.msg = ""

    '''
     操作步骤
    '''

    def operate(self):
        if self.test_msg[0] is False: # 如果用例编写错误
            self.isOperate = False
            return False
        for item in self.testCase:
            m_s_g = self.msg + "\n" if self.msg != "" else ""
            result = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)
            if not result["result"]:
                msg = "执行过程中失败,请检查元素是否存在" + item["element_info"] + "," + result.get("text", " ")
                if not result.get("webview", True):
                    msg = "切换到webview失败,请确定是否在webview页面"
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False
            if item.get("is_time", "0") != "0":
                time.sleep(item["is_time"])  # 等待时间
                print("--等待下---")

            if item.get("operate_type", "0") == be.GET_VALUE or item.get("operate_type", "0") == be.GET_CONTENT_DESC:
                self.get_value.append(result["text"])
                self.is_get = True  # 对比数据

        return True

    def checkPoint(self, kwargs={}):
        result = self.check(kwargs)
        if self.test_msg[0] is not False:  # 如果用例编写正确
            if result is not True and be.RE_CONNECT:
                self.msg = "用例失败重连过一次,失败原因:" + self.testInfo[0]["msg"]
                self.logTest.buildStartLine(self.caseName + "_失败重连")  # 记录日志
                self.operateElement.switchToNative()
                self.driver.launch_app()
                self.isOperate = True
                self.get_value = []
                self.is_get = False
                self.operate()
                result = self.check(kwargs)
                self.testInfo[0]["msg"] = self.msg
            self.operateElement.switchToNative()

        statistics_result(result=result, testInfo=self.testInfo, caseName=self.caseName,
                          driver=self.driver, logTest=self.logTest, devices=self.device,
                          testCase=self.testCase,
                          testCheck=self.testcheck)

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary:相反检查点,传1表示如果检查元素存在就说明失败
    toast: 表示提示框检查点
    contrary_getval: 相反值检查点,如果对比成功,说明失败
    check_point: 自定义检查结果    
    '''

    def check(self, kwargs):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 如果有重跑机制,成功后会默认把日志传进来


        # if kwargs.get("check_point", "0") != "0": 自定义检查点
        #     return kwargs["check_point"]

        if self.isOperate:
            for item in self.testcheck:
                if kwargs.get("check", be.DEFAULT_CHECK) == be.TOAST:
                    result = \
                    self.operateElement.toast(item["element_info"], testInfo=self.testInfo, logTest=self.logTest)[
                        "result"]
                    if result is False:
                        m = get_error(
                            {"type": be.DEFAULT_CHECK, "element_info": item["element_info"], "info": item["info"]})
                        self.msg = m_s_g + m
                        print(m)
                        self.testInfo[0]["msg"] = m
                    break
                else:
                    resp = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)

                if kwargs.get("check", be.DEFAULT_CHECK) == be.DEFAULT_CHECK and not resp["result"]:
                    m = get_error(
                        {"type": be.DEFAULT_CHECK, "element_info": item["element_info"], "info": item["info"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check", be.DEFAULT_CHECK) == be.CONTRARY and resp["result"]:
                    m = get_error({"type": be.CONTRARY, "element_info": item["element_info"], "info": item["info"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = self.msg
                    result = False
                    break
                # 检查点关键字contrary_getval: 相反值检查点,如果对比成功,说明失败
                if kwargs.get("check", be.DEFAULT_CHECK) == be.CONTRARY_GETVAL and self.is_get and resp["result"] \
                        in self.get_value:
                    m = get_error(
                        {"type": be.CONTRARY_GETVAL, "current": item["element_info"], "history": resp["text"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check", be.DEFAULT_CHECK) == be.COMPARE and self.is_get and resp["text"] \
                        not in self.get_value:  # 历史数据和实际数据对比
                    result = False
                    m = get_error({"type": be.COMPARE, "current": item["element_info"], "history": resp["text"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    break
        else:
            result = False
        return result
コード例 #5
0
class PagesObjects:
    '''
    page层
    kwargs: WebDriver driver, String path(yaml配置参数)
    isOperate: 操作失败,检查点就失败
    testInfo:
    testCase:
    '''
    def __init__(self, kwargs):
        self.driver = kwargs["driver"]
        #dict.get(key, default=None)   返回指定键的值,如果值不在字典中返回默认值None
        #这处地方报错,暂时没想明白为什么报错,先注释掉
        """
        if kwargs.get("launch_app", "0") == "0":  # 若为空,重新打开app
            for i in range(0,1):
                self.driver.back()
            self.driver.launch_app()
        """
        # self.path = kwargs["path"]
        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        self.test_msg = kwargs["test_msg"]
        self.testInfo = self.test_msg[1]["testinfo"]
        self.testCase = self.test_msg[1]["testcase"]
        self.testcheck = self.test_msg[1]["check"]
        self.device = kwargs["device"]
        self.logTest = kwargs["logTest"]
        self.caseName = kwargs["caseName"]
        self.get_value = []
        self.is_get = False  # 检查点特殊标志,结合get_value使用。若为真,说明检查点要对比历史数据和实际数据
        self.msg = ""

    '''
     操作步骤
    '''

    def operate(self):
        if self.test_msg[0] is False:  # 如果用例编写错误
            self.isOperate = False
            return False
        for item in self.testCase:
            m_s_g = self.msg + "\n" if self.msg != "" else ""
            #调用BaseOperate.py文件里的operateElement.operate方法,传入四个参数,
            result = self.operateElement.operate(item, self.testInfo,
                                                 self.logTest, self.device)
            if not result["result"]:
                msg = "执行过程中失败,请检查元素是否存在" + item[
                    "element_info"] + "," + result.get("text", " ")
                if not result.get("webview", True):
                    msg = "切换到webview失败,请确定是否在webview页面"
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False
            if item.get("is_time", "0") != "0":
                time.sleep(item["is_time"])  # 等待时间
                print("--等待下---")

            if item.get("operate_type", "0") == be.GET_VALUE or item.get(
                    "operate_type", "0") == be.GET_CONTENT_DESC:
                self.get_value.append(result["text"])
                self.is_get = True  # 对比数据

        return True

    def checkPoint(self, kwargs={}):

        result = self.check(kwargs)  #执行下面的check方法
        if self.test_msg[0] is not False:  # 如果用例编写正确
            if result is not True and be.RE_CONNECT:
                self.msg = "用例失败重连过一次,失败原因:" + self.testInfo[0]["msg"]
                self.logTest.buildStartLine(self.caseName + "_失败重连")  # 记录日志
                self.operateElement.switchToNative()
                self.driver.launch_app()
                self.isOperate = True
                self.get_value = []
                self.is_get = False
                self.operate()
                result = self.check(kwargs)
                self.testInfo[0]["msg"] = self.msg
            self.operateElement.switchToNative()

        statistics_result(result=result,
                          testInfo=self.testInfo,
                          caseName=self.caseName,
                          driver=self.driver,
                          logTest=self.logTest,
                          devices=self.device,
                          testCase=self.testCase,
                          testCheck=self.testcheck)

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary:相反检查点,传1表示如果检查元素存在就说明失败
    toast: 表示提示框检查点
    contrary_getval: 相反值检查点,如果对比成功,说明失败
    check_point: 自定义检查结果    
    '''

    def check(self, kwargs):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 如果有重跑机制,成功后会默认把日志传进来

        # if kwargs.get("check_point", "0") != "0": 自定义检查点
        #     return kwargs["check_point"]

        if self.isOperate:
            for item in self.testcheck:
                #如果check的值为toast,则检查点为toast,否则为默认检查点
                print("-------start checking-----------")
                print(item.get("check"))
                print("-----------end check------------")
                if item.get("check", be.DEFAULT_CHECK) == be.TOAST:
                    result = \
                    self.operateElement.toast(item["element_info"], testInfo=self.testInfo, logTest=self.logTest)[
                        "result"]
                    if result is False:
                        m = get_error({
                            "type": be.DEFAULT_CHECK,
                            "element_info": item["element_info"],
                            "info": item["info"]
                        })
                        self.msg = m_s_g + m
                        print(m)
                        self.testInfo[0]["msg"] = m
                    break
                else:
                    #调用BaseOperate里的operateElement.operate方法,传入检查点check的信息,operate()方法会调用findElement方法
                    #如果findElement方法找到元素会return true,又因为检查点信息check里没有operate_type字段,operate_by方法会直接将此判定为true
                    #不执行元素操作,所以此处的调用就是完成 查找默认检查点是否存在的操作
                    resp = self.operateElement.operate(item, self.testInfo,
                                                       self.logTest,
                                                       self.device)
                #如果找到元素,resp["result"]为Ture,not resp["result"]就是false

                if item.get("check", be.DEFAULT_CHECK
                            ) == be.DEFAULT_CHECK and not resp["result"]:
                    m = get_error({
                        "type": be.DEFAULT_CHECK,
                        "element_info": item["element_info"],
                        "info": item["info"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break

                #如果找到这个元素,就是检查失败
                if item.get(
                        "check",
                        be.DEFAULT_CHECK) == be.CONTRARY and resp["result"]:
                    m = get_error({
                        "type": be.CONTRARY,
                        "element_info": item["element_info"],
                        "info": item["info"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = self.msg
                    result = False
                    break

                # 检查点关键字contrary_getval: 相反值检查点,如果对比成功,说明失败
                if item.get("check", be.DEFAULT_CHECK) == be.CONTRARY_GETVAL and self.is_get and resp["result"] \
                        in self.get_value:
                    m = get_error(\
                        {"type": be.CONTRARY_GETVAL, "current": item["element_info"], "history": resp["text"]})
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break


                if item.get("check", be.DEFAULT_CHECK) == be.COMPARE and self.is_get and resp["text"] \
                        not in self.get_value:  # 历史数据和实际数据对比
                    m = get_error({
                        "type": be.COMPARE,
                        "current": item["element_info"],
                        "history": resp["text"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break

                #文本检查点,如果元素的text文本和设置的msg不想等,则判定为失败
                if item.get("check", be.DEFAULT_CHECK
                            ) == be.TEXT_CHECK and resp["text"] == item["msg"]:

                    m = get_error({
                        "type": be.TEXT_CHECK,
                        "flag": item["msg"],
                        "current": resp["text"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break

        else:
            result = False
        return result
コード例 #6
0
ファイル: Pages.py プロジェクト: didier47/appium
class PagesObjects:
    def __init__(self, kwargs):
        self.driver = kwargs["driver"]
        if kwargs.get("launch_app", "0") == "0":
            self.driver.launch_app()

        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        self.test_msg = kwargs["test_msg"]
        self.testInfo = self.test_msg[1]["testinfo"]
        self.testCase = self.test_msg[1]["testcase"]
        self.testcheck = self.test_msg[1]["check"]
        self.device = kwargs["device"]
        self.logTest = kwargs["logTest"]
        self.caseName = kwargs["caseName"]
        self.get_value = []
        self.is_get = False
        self.msg = ""

    def operate(self):
        if self.test_msg[0] is False:
            self.isOperate = False
            return False
        for item in self.testCase:
            m_s_g = self.msg + "\n" if self.msg != "" else ""
            result = self.operateElement.operate(item, self.testInfo,
                                                 self.logTest, self.device)
            if not result["result"]:
                msg = "Falló durante la ejecución, verifique si el elemento existe" + item[
                    "element_info"] + "," + result.get("text", " ")
                if not result.get("webview", True):
                    msg = "No se pudo cambiar a la vista web, confirme si está en la página de vista web"
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False
            if item.get("is_time", "0") != "0":
                time.sleep(item["is_time"])
                print("--Espere---")

            if item.get("operate_type", "0") == be.GET_VALUE or item.get(
                    "operate_type", "0") == be.GET_CONTENT_DESC:
                self.get_value.append(result["text"])
                self.is_get = True

        return True

    def checkPoint(self, kwargs={}):
        result = self.check(kwargs)
        if self.test_msg[0] is not False:
            if result is not True and be.RE_CONNECT:
                self.msg = "El caso de uso falló y se volvió a conectar una vez, el motivo del fallo:" + \
                           self.testInfo[0]["msg"]
                self.logTest.buildStartLine(self.caseName +
                                            "_No se pudo volver a conectar")
                self.operateElement.switchToNative()
                self.driver.launch_app()
                self.isOperate = True
                self.get_value = []
                self.is_get = False
                self.operate()
                result = self.check(kwargs)
                self.testInfo[0]["msg"] = self.msg
            self.operateElement.switchToNative()

        statistics_result(result=result,
                          testInfo=self.testInfo,
                          caseName=self.caseName,
                          driver=self.driver,
                          logTest=self.logTest,
                          devices=self.device,
                          testCase=self.testCase,
                          testCheck=self.testcheck)

    def check(self, kwargs):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""

        if self.isOperate:
            for item in self.testcheck:
                if kwargs.get("check", be.DEFAULT_CHECK) == be.TOAST:
                    result = \
                        self.operateElement.toast(item["element_info"], testInfo=self.testInfo, logTest=self.logTest)[
                            "result"]
                    if result is False:
                        m = get_error({
                            "type": be.DEFAULT_CHECK,
                            "element_info": item["element_info"],
                            "info": item["info"]
                        })
                        self.msg = m_s_g + m
                        print(m)
                        self.testInfo[0]["msg"] = m
                    break
                else:
                    resp = self.operateElement.operate(item, self.testInfo,
                                                       self.logTest,
                                                       self.device)

                if kwargs.get("check", be.DEFAULT_CHECK
                              ) == be.DEFAULT_CHECK and not resp["result"]:
                    m = get_error({
                        "type": be.DEFAULT_CHECK,
                        "element_info": item["element_info"],
                        "info": item["info"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
        else:
            result = False
        return result
コード例 #7
0
ファイル: Pages.py プロジェクト: dreamns/git
class PagesObjects:
    '''
    page层
    kwargs: WebDriver driver, String path(yaml配置参数)
    isOperate: 操作失败,检查点就失败
    testInfo:
    testCase:
    '''
    def __init__(self, **kwargs):
        self.driver = kwargs["driver"]
        if kwargs.get("launch_app", "0") == "0":  # 若为空,重新打开app
            self.driver.launch_app()
        self.path = kwargs["path"]
        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        test_msg = getYam(self.path)
        self.testInfo = test_msg["testinfo"]
        self.testCase = test_msg["testcase"]
        self.testcheck = test_msg["check"]
        self.get_value = []
        self.is_get = False  # 检查点特殊标志,结合get_value使用。若为真,说明检查点要对比历史数据和实际数据

    '''
     操作步骤
     logTest 日记记录器
    '''

    def operate(self, logTest):
        for item in self.testCase:

            result = self.operateElement.operate(item, self.testInfo, logTest)
            if not result:
                print("执行过程中失败,请检查元素是否存在" + item["element_info"])
                self.testInfo[0][
                    "msg"] = "执行过程中失败,请检查元素是否存在" + item["element_info"]
                self.isOperate = False
                return False
            if item.get("is_time", "0") != "0":
                time.sleep(item["is_time"])  # 等待时间
                print("--等待下---")

            if item.get("operate_type", "0") == be.GET_VALUE:
                re_reulst = re.findall(r'[a-zA-Z\d+\u4e00-\u9fa5]',
                                       result)  # 只匹配中文,大小写,字母
                self.get_value.append("".join(re_reulst))
                self.is_get = True  # 对比数据

        return True

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    msg: 自定义错误日志
    contrary:相反检查点,如果检查元素存在就说明失败
    toast: 表示提示框检查点
    contrary_getval: 相反值检查点,如果对比存说明失败
    '''

    def checkPoint(self, func=None, **kwargs):
        result = True
        if self.isOperate:
            for item in self.testcheck:

                if kwargs.get("toast", "0") != "0":
                    resp = self.operateElement.toast(item["element_info"],
                                                     testInfo=self.testInfo,
                                                     logTest=kwargs["logTest"])
                else:
                    resp = self.operateElement.operate(item, self.testInfo,
                                                       kwargs["logTest"])

                if kwargs.get("contrary", "0") != "0" and resp:
                    m = "请检查%s操作是否成功" % item["info"]
                    msg = kwargs["msg"] if kwargs.get("msg", "0") != "0" else m
                    print(msg)
                    self.isOperate = False
                    self.testInfo[0]["msg"] = msg
                    result = False
                    break
                if kwargs.get("contrary", "0") == "0" and not resp:
                    msg = "请检查元素" + item["element_info"] + "是否存在"
                    print(msg)
                    self.isOperate = False
                    self.testInfo[0]["msg"] = msg
                    result = False
                    break

                if kwargs.get(
                        "contrary_getval",
                        "0") != "0" and self.is_get and resp in self.get_value:
                    result = False
                    m = "对比数据失败,当前取到到数据为:%s,历史取到数据为:%s" % resp % self.get_value
                    msg = kwargs["msg"] if kwargs.get("msg", "0") != "0" else m
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    break

                if kwargs.get(
                        "contrary_getval", "0"
                ) == "0" and self.is_get and resp not in self.get_value:  # 历史数据和实际数据对比
                    result = False
                    msg = "对比数据失败,获取历史数据为:" + ".".join(
                        self.get_value) + "当前获取的数据为:" + resp
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    break
        else:
            result = False
        self.operateElement.switchToNative()
        countSum(result)
        countInfo(result=result,
                  testInfo=self.testInfo,
                  caseName=kwargs["caseName"],
                  driver=self.driver,
                  logTest=kwargs["logTest"],
                  devices=kwargs["devices"],
                  testCase=self.testCase,
                  testCheck=self.testcheck)
        return result
コード例 #8
0
ファイル: Pages.py プロジェクト: zyou1986/appium
class PagesObjects:
    '''
    page层
    kwargs: WebDriver driver, String path(yaml配置参数)
    isOperate: 操作失败,检查点就失败
    testInfo:
    testCase:
    '''

    def __init__(self, kwargs):
        self.driver = kwargs["driver"]
        if kwargs.get("launch_app", "0") == "0":  # 若为空,重新打开app
            self.driver.launch_app()
        self.path = kwargs["path"]
        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        test_msg = getYam(self.path)
        self.testInfo = test_msg["testinfo"]
        self.testCase = test_msg["testcase"]
        self.testcheck = test_msg["check"]
        self.device = kwargs["device"]
        self.logTest = kwargs["logTest"]
        self.caseName = kwargs["caseName"]
        self.get_value = []
        self.is_get = False  # 检查点特殊标志,结合get_value使用。若为真,说明检查点要对比历史数据和实际数据
        self.msg = ""

    '''
     操作步骤
    '''

    def operate(self):
        for item in self.testCase:
            m_s_g = self.msg + "\n" if self.msg != "" else ""
            result = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)
            if not result["result"]:
                msg = "执行过程中失败,请检查元素是否存在" + item["element_info"] + "," + result.get("text", " ")
                if not result.get("webview", True):
                    msg = "切换到webview失败,请确定是否在webview页面"
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False
            if item.get("is_time", "0") != "0":
                time.sleep(item["is_time"])  # 等待时间
                print("--等待下---")

            if item.get("operate_type", "0") == be.GET_VALUE or item.get("operate_type", "0") == be.GET_CONTENT_DESC:
                self.get_value.append(result["text"])
                self.is_get = True  # 对比数据

        return True

    def checkPoint(self, kwargs={}):
        result = self.check(kwargs)
        # print(self.driver.page_source)
        if result is not True and be.RE_CONNECT:
            self.msg = "用例失败重连过一次,失败原因:" + self.testInfo[0]["msg"]
            self.logTest.buildStartLine(self.caseName + "_失败重连")  # 记录日志
            self.operateElement.switchToNative()
            self.driver.launch_app()
            self.isOperate = True
            self.get_value = []
            self.is_get = False
            self.operate()
            result = self.check(kwargs)
            self.testInfo[0]["msg"] = self.msg
        self.operateElement.switchToNative()

        statistics_result(result=result, testInfo=self.testInfo, caseName=self.caseName,
                          driver=self.driver, logTest=self.logTest, devices=self.device,
                          testCase=self.testCase,
                          testCheck=self.testcheck)

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary:相反检查点,传1表示如果检查元素存在就说明失败
    toast: 表示提示框检查点
    contrary_getval: 相反值检查点,如果对比成功,说明失败
    check_point: 自定义检查结果    
    '''

    def check(self, kwargs):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 如果有重跑机制,成功后会默认把日志传进来
        # if kwargs.get("check_point", "0") != "0":
        #     return kwargs["check_point"]

        if self.isOperate:
            for item in self.testcheck:
                if kwargs.get("toast", "0") != "0":
                    resp = self.operateElement.toast(item["element_info"], testInfo=self.testInfo,
                                                     logTest=self.logTest)
                else:
                    resp = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)

                if kwargs.get("check", "0") == "0" and not resp["result"]:
                    m = "请检查元素" + item["element_info"] + "是否存在," + item["info"] + " 操作是否成功"
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check", "0") == "contrary" and resp["result"]:
                    m = "请检查%s" % item["info"] + "是否成功"
                    self.msg = m_s_g + m
                    print(self.msg)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check", "0") == "contrary_getval" and self.is_get and resp["result"] in self.get_value:
                    m = "对比数据失败,当前取到到数据为:%s,历史取到数据为:%s" % resp["text"] % self.get_value
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check",
                              "0") == "0" and self.is_get and resp["text"] not in self.get_value:  # 历史数据和实际数据对比
                    result = False
                    m = "对比数据失败,获取历史数据为:" + ".".join(self.get_value) + ",当前获取的数据为:" + resp["text"]
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    break
        else:
            result = False
        return result
コード例 #9
0
ファイル: Pages.py プロジェクト: junyjiang/appium_test
class PageObjects:
    def __init__(self, kwargs):
        self.driver = kwargs['driver']
        self.path = kwargs['path']
        self.isOperate = True
        self.operateElement = OperateElement(self.driver)
        test_msg = readyaml(self.path)
        self.testInfo = test_msg["testinfo"]
        self.testCase = test_msg["testcase"]
        self.testcheck = test_msg["check"]
        self.is_get = False
        self.msg = ""

    def operate(self):
        print(self.testCase)
        for item in self.testCase:
            m_s_g = self.msg + "\n" if self.msg != "" else ""
            result = self.operateElement.operate(item, self.testInfo)
            if not result["result"]:
                msg = "执行过程中失败,请检查元素是否存在" + item[
                    "element_info"] + "," + result.get("text", " ")
                if not result.get("webview", True):
                    msg = "切换到webview失败,请确定是否在webview页面"
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False
            if item.get("is_time", "0") != "0":
                time.sleep(item["is_time"])  # 等待时间
                print("--等待下---")
            if item.get("operate_type", "0") == be.GET_VALUE or item.get(
                    "operate_type", "0") == be.GET_CONTENT_DESC:
                self.get_value.append(result["text"])
                self.is_get = True  # 对比数据
        return True

    def checkPoint(self, kwargs={}):
        result = self.check(kwargs)
        # print(self.driver.page_source)
        if result is not True and be.RE_CONNECT:
            self.msg = "用例失败重连过一次,失败原因:" + self.testInfo[0]["msg"]
            self.driver.launch_app()
            self.isOperate = True
            self.get_value = []
            self.is_get = False
            self.operate()
            result = self.check(kwargs)
            self.testInfo[0]["msg"] = self.msg

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary:相反检查点,传1表示如果检查元素存在就说明失败
    toast: 表示提示框检查点
    contrary_getval: 相反值检查点,如果对比成功,说明失败
    check_point: 自定义检查结果
    '''

    def check(self, kwargs):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 如果有重跑机制,成功后会默认把日志传进来
        # if kwargs.get("check_point", "0") != "0":
        #     return kwargs["check_point"]

        if self.isOperate:
            for item in self.testcheck:
                if kwargs.get("toast", "0") != "0":
                    resp = self.operateElement.toast(item["element_info"])
                else:
                    resp = self.operateElement.operate(item, self.testInfo)

                if kwargs.get("check", "0") == "0" and not resp["result"]:
                    m = "请检查元素" + item["element_info"] + "是否存在," + item[
                        "info"] + " 操作是否成功"
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check", "0") == "contrary" and resp["result"]:
                    m = "请检查%s" % item["info"] + "是否成功"
                    self.msg = m_s_g + m
                    print(self.msg)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get(
                        "check",
                        "0") == "contrary_getval" and self.is_get and resp[
                            "result"] in self.get_value:
                    m = "对比数据失败,当前取到到数据为:%s,历史取到数据为:%s" % resp[
                        "text"] % self.get_value
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    result = False
                    break
                if kwargs.get("check", "0") == "0" and self.is_get and resp[
                        "text"] not in self.get_value:  # 历史数据和实际数据对比
                    result = False
                    m = "对比数据失败,获取历史数据为:" + ".".join(
                        self.get_value) + ",当前获取的数据为:" + resp["text"]
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    break
        else:
            result = False
        return result