Esempio n. 1
0
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.test_msg[1]["check"]
        self.is_get = True  # 检查点特殊标志,结合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("------->>等待:" + str(item["is_time"]) + "秒...")

            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 = True
                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 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:
                    resp = self.operateElement.operate(item, self.testInfo,
                                                       self.logTest,
                                                       self.device)

                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
                print(resp)
                if item.get("check", be.DEFAULT_CHECK
                            ) == be.COMPARE and self.is_get and resp.get(
                                "text", "NoSuchElementError") != str(
                                    item["msg"]):  # 历史数据和实际数据对比
                    result = False
                    m = get_error({
                        "type":
                        be.COMPARE,
                        "current":
                        resp.get("text", "NoSuchElementError"),
                        "expectValue":
                        item["msg"]
                    })
                    self.msg = m_s_g + m
                    print(m)
                    self.testInfo[0]["msg"] = m
                    break

        else:
            result = False
        return result
Esempio n. 2
0
class HistorySwipeDelPage:

    def __init__(self, kwargs):
        self.driver = kwargs["driver"]
        if kwargs.get("launch_app", "0") == "0":
            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.msg = ""

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

            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"]
                m_s_g = self.msg + "\n" if self.msg != "" else ""
                self.msg = m_s_g + msg
                print(msg)
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False

            if item.get("operate_type", "0") == be.SWIPE_LEFT:
                web_element = self.driver.find_elements_by_id(item["element_info"])[item["index"]]
                start = web_element.location

                startx = start["x"]
                starty = start["y"]

                size1 = web_element.size

                width = size1["width"]
                height = size1["height"]

                endX = width + startx
                endY = height + starty
                self.driver.swipe(endX, endY, starty, endY)
            if item.get("operate_type", "0") == be.GET_VALUE:
                self.get_value.append(result['text'])
        return True

    def checkPoint(self, kwargs={}):
        result = self.check()
        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.operate()
            result = self.check()
            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,
                          testCheck=self.testcheck)
        return result

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

        if self.isOperate:
            for item in self.testcheck:
                resp = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)
                if not resp["result"]:
                    msg = "Por favor marque el elemento" + item["element_info"] + "existe"
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    result = False
                if resp["text"] in self.get_value:
                    msg = "Error en la eliminación de datos, los datos antes de la eliminación son: " + ".".join(
                        self.get_value) + "Los datos adquiridos actualmente son:" + resp["text"]
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    break
        else:
            result = False
        return result
Esempio n. 3
0
class CollectSwipeDelPage:
    '''
    滑动删除收藏
    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
        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.msg = ""

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

    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_LEFT:  # 根据元素左滑动
                web_element = self.driver.find_elements_by_id(item["element_info"])[item["index"]]
                start = web_element.location
                # 获取控件开始位置的坐标轴
                startx = start["x"]
                starty = start["y"]
                # 获取控件坐标轴差
                size1 = web_element.size

                width = size1["width"]
                height = size1["height"]
                # 计算出控件结束坐标
                endX = width + startx
                endY = height + starty
                self.driver.swipe(endX-50, endY, starty+500, endY)
            if item.get("operate_type", "0") == be.GET_VALUE:
                self.get_value.append(result["text"])
        return True

    def checkPoint(self):
        result = self.check()
        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.operate()
            result = self.check()
            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)
        return result

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    '''

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

        if self.isOperate:
            for item in self.testcheck:
                resp = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)

                if not resp["result"]:  # 表示操作出现异常情况检查点为成功
                    print("操作失败,简单点为成功")
                    result = True
                    break

                if resp["text"] in self.get_value:  # 删除后数据对比
                    msg = "删除数据失败,删除前数据为:" + ".".join(self.get_value) + "当前获取的数据为:" + resp["text"]
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    break
        else:
            result = False
        return result
Esempio n. 4
0
class CardsSortPage:
    '''
    滑动删除历史记录
    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
        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.location = []
        self.msg = ""

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

    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"]
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False

            if item.get("operate_type", "0") == "location":
                app = {}
                web_element = self.driver.find_elements_by_id(
                    item["element_info"])[item["index"]]
                start = web_element.location
                # 获取控件开始位置的坐标轴
                app["startX"] = start["x"]
                app["startY"] = start["y"]
                # 获取控件坐标轴差
                size1 = web_element.size

                width = size1["width"]
                height = size1["height"]
                # 计算出控件结束坐标
                endX = width + app["startX"]
                endY = height + app["startY"]

                app["endX"] = endX - 20
                app["endY"] = endY - 60

                self.location.append(app)
                # self.driver.swipe(endX, endY, starty, endY)
            if item.get("operate_type", "0") == be.GET_VALUE:
                self.get_value.append(result["text"])

            if item.get("is_swpie", "0") != "0":
                print(self.location)
                self.driver.swipe(self.location[0]["endX"],
                                  self.location[0]["endY"],
                                  self.location[1]["endX"],
                                  self.location[1]["endY"] + 10)

        return True

    def checkPoint(self, kwargs={}):
        result = self.check()
        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.operate()
            self.get_value = []
            self.location = ""
            result = self.check()
            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,
                          testCheck=self.testcheck)
        return result

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary 相反检查点,意思就是如果检查结果为真,检查点就是失败
    '''

    def check(self):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 重跑后异常日志
        if self.isOperate:
            for item in self.testcheck:
                resp = self.operateElement.operate(item, self.testInfo,
                                                   self.logTest, self.device)
                if not resp["result"]:
                    msg = "请检查元素" + item["element_info"] + "是否存在"
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    result = False
                if resp['text'] not in self.get_value:  # 删除后数据对比
                    msg = "卡片排序失败" + str(
                        self.get_value) + "当前首页第一条卡片数据为:" + resp[
                            "text"] + "排序成功的第一个卡片值为:" + ".".join(
                                self.get_value)
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    break
        else:
            result = False
        return result
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
class p_settings_search02:
    '''
    滑动删除历史记录
    isOperate: 操作失败,检查点就失败,kwargs: WebDriver driver, String path(yaml配置参数)
    '''
    def __init__(self, kwargs):
        self.driver = kwargs["driver"]  #Driver
        if kwargs.get("launch_app", "0") == "0":  # 若为空,重新打开app
            self.driver.launch_app()
        self.path = kwargs["path"]  #用例参数yaml路径
        self.operateElement = OperateElement(self.driver)  #元素操作
        self.isOperate = True  #元素是否可执行,默认为可以。

        #从yaml文件解析操作步骤和执行结果
        test_msg = getYam(self.path)
        self.testInfo = test_msg["testinfo"]
        self.testCase = test_msg["testcase"]
        self.testcheck = test_msg["check"]
        #每一条用例由  testinfo,testcase,check3部分组成,其中testcase由多个元素组成
        self.device = kwargs["device"]
        self.logTest = kwargs["logTest"]  #myLog().getLog(cls.devicesName)
        self.caseName = kwargs["caseName"]  #测试函数名

        self.get_value = get_text(self.testcheck)
        #self.get_value = ['Add a language']
        self.location = []
        self.msg = ""

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

    def operate(self):
        for item in self.testCase:  #解析出测试步骤(测试步骤包括多个元素)
            print(item)
            print('IIIIIIIIIIIIIIIIIIIIIIIIIII')
            m_s_g = self.msg + "\n" if self.msg != "" else ""
            #如果msg非空,加\n,否则保持空

            result = self.operateElement.operate(item, self.testInfo,
                                                 self.logTest, self.device)
            #result:True or False
            #执行测试用例,并获取结果

            #如果result["result"] 为:None,False,'' ,则:
            if not result["result"]:
                msg = "执行失败,请检查元素是否存在:" + item["element_info"]
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False

            #如果该用例的操作类型为 location,获取该控件的坐标self.location
            if item.get("operate_type", "0") == "location":
                app = {}
                web_element = self.driver.find_elements_by_id(
                    item["element_info"])[item["index"]]
                start = web_element.location
                # 获取控件开始位置的坐标轴
                app["startX"] = start["x"]
                app["startY"] = start["y"]
                # 获取控件坐标轴差
                size1 = web_element.size

                width = size1["width"]
                height = size1["height"]
                # 计算出控件结束坐标
                endX = width + app["startX"]
                endY = height + app["startY"]

                app["endX"] = endX - 20
                app["endY"] = endY - 60

                print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^')
                print(self.location)
                self.location.append(app)
                # self.driver.swipe(endX, endY, starty, endY)
                print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^')
                print(self.location)

            #如果该用例的操作类型为 :get_value (获取text)
            if item.get("operate_type", "0") == be.GET_VALUE:
                #将操作获得的text值,注入到 self.get_value中
                self.get_value.append(result["text"])

            #如果该用例中 is_swpie 不是0 的时候:(待确认)
            if item.get("is_swpie", "0") != "0":

                self.driver.swipe(self.location[0]["endX"],
                                  self.location[0]["endY"],
                                  self.location[1]["endX"],
                                  self.location[1]["endY"] + 10)

        return True  #(待确认)

    def checkPoint(self, kwargs={}):
        result = self.check()
        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.operate()
            self.get_value = [True]
            self.location = ""
            result = self.check()
            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,
                          testCheck=self.testcheck)
        return result

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary 相反检查点,意思就是如果检查结果为真,检查点就是失败
    '''

    def check(self):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 重跑后异常日志
        if self.isOperate:  #默认为True
            for item in self.testcheck:  #迭代yaml中check元素
                resp = self.operateElement.operate(item, self.testInfo,
                                                   self.logTest, self.device)
                #resp : maybe =  {'result': True, 'text': 'ERASEEVERYTHING'}
                print(resp)
                print('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
                if resp["result"] == True:
                    result = True
                if not resp["result"]:
                    msg = "请检查元素" + item["element_info"] + "是否存在"
                    self.msg = m_s_g + msg
                    self.testInfo[0]["msg"] = msg
                    result = False
                if resp['text'] not in self.get_value:
                    #resp : {'result': True, 'text': 'ERASEEVERYTHING'}
                    msg = "期望的text为:" + str(
                        self.get_value) + "。 实际的text为:" + resp["text"]
                    self.msg = m_s_g + msg
                    self.testInfo[0]["msg"] = msg
                    break
        else:
            result = False
        return result
Esempio n. 8
0
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
Esempio n. 9
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
Esempio n. 10
0
class CardsSortPage:

    def __init__(self, kwargs):
        self.driver = kwargs["driver"]
        if kwargs.get("launch_app", "0") == "0":
            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.location = []
        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 = "Falló durante la ejecución, verifique si el elemento existe" + item["element_info"]
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False

            if item.get("operate_type", "0") == "location":
                app = {}
                web_element = self.driver.find_elements_by_id(item["element_info"])[item["index"]]
                start = web_element.location

                app["startX"] = start["x"]
                app["startY"] = start["y"]

                size1 = web_element.size

                width = size1["width"]
                height = size1["height"]

                endX = width + app["startX"]
                endY = height + app["startY"]

                app["endX"] = endX - 20
                app["endY"] = endY - 60

                self.location.append(app)

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

            if item.get("is_swpie", "0") != "0":
                print(self.location)
                self.driver.swipe(self.location[0]["endX"], self.location[0]["endY"], self.location[1]["endX"],
                                  self.location[1]["endY"] + 10)

        return True

    def checkPoint(self, kwargs={}):
        result = self.check()
        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.operate()
            self.get_value = []
            self.location = ""
            result = self.check()
            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,
                          testCheck=self.testcheck)
        return result

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

        if self.isOperate:
            for item in self.testcheck:
                resp = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)
                if not resp["result"]:
                    msg = "Por favor marque el elemento" + item["element_info"] + "existe"
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    result = False
                if resp['text'] not in self.get_value:
                    msg = "Falló la clasificación de tarjetas" + str(
                        self.get_value) + "Los primeros datos de la tarjeta en la página de inicio actual son:" + resp[
                              "text"] + "El primer valor de la tarjeta que se clasifica correctamente es: " + ".".join(
                        self.get_value)
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    break
        else:
            result = False
        return result
Esempio n. 11
0
class HistorySwipeDelPage:
    '''
    滑动删除历史记录
    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
        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.msg = ""

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

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

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

            if item.get("operate_type", "0") == be.SWIPE_LEFT:  # 根据元素左滑动
                web_element = self.driver.find_elements_by_id(item["element_info"])[item["index"]]
                start = web_element.location
                # 获取控件开始位置的坐标轴
                startx = start["x"]
                starty = start["y"]
                # 获取控件坐标轴差
                size1 = web_element.size

                width = size1["width"]
                height = size1["height"]
                # 计算出控件结束坐标
                endX = width + startx
                endY = height + starty
                self.driver.swipe(endX, endY, starty, endY)
            if item.get("operate_type", "0") == be.GET_VALUE:
                self.get_value.append(result['text'])
        return True

    def checkPoint(self, kwargs={}):
        result = self.check()
        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.operate()
            result = self.check()
            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,
                          testCheck=self.testcheck)
        return result

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    '''

    def check(self, kwargs={}):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 重跑后异常日志

        if self.isOperate:
            for item in self.testcheck:
                resp = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)
                if not resp["result"]:
                    msg = "请检查元素" + item["element_info"] + "是否存在"
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    result = False
                if resp["text"] in self.get_value:  # 删除后数据对比
                    msg = "删除数据失败,删除前数据为:" + ".".join(self.get_value) + "当前获取的数据为:" + resp["text"]
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    break
        else:
            result = False
        return result
Esempio n. 12
0
File: Pages.py Progetto: 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
Esempio n. 13
0
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
Esempio n. 14
0
class CardsSortPage:
    '''
    滑动删除历史记录
    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
        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.location = []
        self.msg = ""

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

    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"]
                print(msg)
                self.msg = m_s_g + msg
                self.testInfo[0]["msg"] = msg
                self.isOperate = False
                return False

            if item.get("operate_type", "0") == "location":
                app = {}
                web_element = self.driver.find_elements_by_id(item["element_info"])[item["index"]]
                start = web_element.location
                # 获取控件开始位置的坐标轴
                app["startX"] = start["x"]
                app["startY"] = start["y"]
                # 获取控件坐标轴差
                size1 = web_element.size

                width = size1["width"]
                height = size1["height"]
                # 计算出控件结束坐标
                endX = width + app["startX"]
                endY = height + app["startY"]

                app["endX"] = endX - 20
                app["endY"] = endY - 60

                self.location.append(app)
                # self.driver.swipe(endX, endY, starty, endY)
            if item.get("operate_type", "0") == be.GET_VALUE:
                self.get_value.append(result["text"])

            if item.get("is_swpie", "0") != "0":
                print(self.location)
                self.driver.swipe(self.location[0]["endX"], self.location[0]["endY"], self.location[1]["endX"], self.location[1]["endY"]+10)

        return True

    def checkPoint(self, kwargs={}):
        result = self.check()
        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.operate()
            self.get_value = []
            self.location = ""
            result = self.check()
            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,
                          testCheck=self.testcheck)
        return result

    '''
    检查点
    caseName:测试用例函数名 用作统计
    logTest: 日志记录
    devices 设备名
    contrary 相反检查点,意思就是如果检查结果为真,检查点就是失败
    '''

    def check(self):
        result = True
        m_s_g = self.msg + "\n" if self.msg != "" else ""
        # 重跑后异常日志
        if self.isOperate:
            for item in self.testcheck:
                resp = self.operateElement.operate(item, self.testInfo, self.logTest, self.device)
                if not resp["result"]:
                    msg = "请检查元素" + item["element_info"] + "是否存在"
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    result = False
                if resp['text'] not in self.get_value:  # 删除后数据对比
                    msg = "卡片排序失败" + str(self.get_value) + "当前首页第一条卡片数据为:" + resp["text"] + "排序成功的第一个卡片值为:"+".".join(self.get_value)
                    self.msg = m_s_g + msg
                    print(msg)
                    self.testInfo[0]["msg"] = msg
                    break
        else:
            result = False
        return result