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
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
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
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
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
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
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
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
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