def wrapper(self, *args, **kwargs): ret = None element = self lineNo = getLineNo() # 获取行号 cmdParam = {'list': args, 'dict': kwargs} result = RunResult.FAIL errorMessage = '' sTime = time.time() number = int(EasyConfig().repeatFindTime) # 重复查找次数 n = number while n > 0: try: ret = func(element, *args, **kwargs) result = RunResult.PASS errorMessage = '在%d次重复查找后找到元素' % (number - n) if n != number else '' break except WebDriverException: time.sleep(2) errorMessage = '由于页面改变,多次查找后未能找到元素' element = self.elementFunc() # 重新查找元素 except Exception as e: errorMessage = e n = n - 1 eTime = time.time() image = screenShot(self.parent) data = getJsonData(result, func.__name__, cmdParam, errorMessage, '%.3fs' % (eTime - sTime), image, self.elementAlias, description, lineNo, 1) putLog(data, self.parent) time.sleep(EasyConfig().afterActionWait) return ret
def wrapper(driver, *args, **kwargs): ret = None lineNo = getLineNo() # 获取行号 errorMessage = '' result = RunResult.ERROR try: ret = func(driver, *args, **kwargs) except ConnectionRefusedError as e: errorMessage = '浏览器异常关闭.' + e.strerror except ScreenShotException as e: result = RunResult.WARNING errorMessage = e.message except Exception as e: if func.__name__ == 'runTest': errorMessage = getErrorMessage(e, '测试用例脚本发生错误,请检查脚本代码:') else: errorMessage = getErrorMessage( e, '[decorator.codeException_dec.%s]:' % (func.__name__)) finally: if not isNoneOrEmpty(errorMessage): data = getJsonData(result, func.__name__, '', errorMessage, '', '', '', '', lineNo, level, driver._driver.sceneId, driver._driver.logger.scriptId) putLog(data, driver._driver.logger, driver._driver.sceneId) return ret
def wrapper(self, *args, **kwargs): ret = None element = self lineNo = getLineNo() # 获取行号 cmdParam = {'list': args, 'dict': kwargs} result = RunResult.FAIL errorMessage = '' number = settings.DRIVER['repeatDoTime'] sTime = time.time() for n in range(number): try: if element.ISNULLELEMENT: # 判断该元素是否为空元素 errorMessage = '在第%d次重新定位元素时,未找到该元素,操作失败' % ( n) if n != 0 else '由于未找到元素,操作失败' result = RunResult.ERROR break else: ret = func(element, *args, **kwargs) result = RunResult.PASS errorMessage = '在%d次重新定位元素后,元素行为执行成功' % ( n + 1) if n != 0 else '' break except UnexpectedAlertPresentException as e: result = RunResult.ERROR errorMessage = '[ERROR-1018]:警告窗引发的异常.' self._driver.switch_to.alert.accept() time.sleep(settings.DRIVER['waitForNAPException']) except WebDriverException: result = RunResult.ERROR time.sleep(settings.DRIVER['waitForWDException']) errorMessage = '%d次重新定位元素后,元素行为执行仍然失败,请检查元素是否准确定位' % (n + 1) element = element.elementFunc() # 重新查找元素 except ConnectionRefusedError as e: result = RunResult.ERROR errorMessage = e except Exception as e: result = RunResult.ERROR errorMessage = getErrorMessage( e, '[decorator.elementAction_dec]:') break eTime = time.time() raiseException(errorMessage, ConnectionRefusedError) # 抛出连接拒绝异常 if description != '': #描述为空的时候,不进行记录 image = screenShot(element.parent) data = getJsonData(result, func.__name__, cmdParam, errorMessage, '%.3fs' % (eTime - sTime), image, element.elementAlias, description, lineNo, 1, element.parent.sceneId, element.parent.logger.scriptId) putLog(data, element.parent.logger, element.parent.sceneId) time.sleep(settings.DRIVER['afterActionWait']) return ret
def wrapper(self, *args, **kwargs): ret = None lineNo = getLineNo() # 获取行号 cmdParam = {'list': args, 'dict': kwargs} errorMessage = '' result = RunResult.FAIL image = '' sTime = time.time() try: ret = func(self, *args, **kwargs) result = RunResult.PASS except Exception as e: errorMessage = e.args[0].split('\n')[0][:150] finally: eTime = time.time() if func.__name__ not in ['close', 'quit']: image = screenShot(self._driver, ret) data = getJsonData(result, func.__name__, cmdParam, errorMessage, '%.3fs' % (eTime - sTime), image, '', description, lineNo, 1) putLog(data, self._driver) time.sleep(EasyConfig().afterActionWait) return ret
def wrapper(self, *args, **kwargs): ret = None lineNo = getLineNo() # 获取行号 cmdParam = {'list': args, 'dict': kwargs} errorMessage = '' result = RunResult.FAIL number = settings.DRIVER['repeatDoTime'] # 重复操作的次数 sTime = time.time() for n in range(number): try: ret = func(self, *args, **kwargs) result = RunResult.PASS errorMessage = '在%d次操作失败后执行成功' % (n + 1) if n != 0 else '' break except NoAlertPresentException: ''' 未发现警告窗 ''' result = RunResult.PASS errorMessage = '未发现警告窗.NoAlertPresentException' time.sleep(settings.DRIVER['waitForNAPException']) except SwitchToWindowException as e: result = RunResult.ERROR errorMessage = e.error break except ConnectionRefusedError as e: result = RunResult.ERROR errorMessage = e except UnexpectedAlertPresentException as e: result = RunResult.ERROR errorMessage = '[ERROR-1018]:警告窗引发的异常.' self._driver.switch_to.alert.accept() time.sleep(settings.DRIVER['waitForNAPException']) except Exception as e: result = RunResult.ERROR errorMessage = getErrorMessage( e, '[decorator.driverAction_dec]:') break eTime = time.time() raiseException(errorMessage, ConnectionRefusedError) # 抛出连接拒绝异常 image = '' # if func.__name__ not in NoScreenShotList: # image = screenShot(self._driver) data = getJsonData(result, func.__name__, cmdParam, errorMessage, '%.3fs' % (eTime - sTime), image, '', description, lineNo, 1, self._driver.sceneId, self._driver.logger.scriptId) putLog(data, self._driver.logger, self._driver.sceneId) time.sleep( settings.DRIVER['afterActionWait']) # 操作(如点击)后固定的等待时间(秒) return ret
def putScriptLog(self, result, cmd, during, description, errorMessage=''): data = getJsonData(result, cmd, '', errorMessage, '%.3fs' % during if isinstance(during, float) else '', '', '', description, '', '1', self.sceneId, self.scriptId) putLog(data, self.logger, self.sceneId)
def wrapper(self, by, value, alias): def saveFunc(): # 该函数保存查找元素的状态及方法 ret = None try: ret = func(self, by, value, alias) addElementAttr(ret, self, by, value, alias, saveFunc) # 为元素对象添加别名 except Exception: pass return ret ret = None lineNo = getLineNo() # 获取行号 cmdParam = {'list': '', 'dict': {by: value}} errorMessage = '' elementAlias = '' result = RunResult.FAIL sTime = time.time() number = int(EasyConfig().repeatFindTime) # 重复查找次数 n = number while n > 0: try: ret = func(self, by, value, alias) result = RunResult.PASS errorMessage = '在%d次重复查找后找到元素' % (number - n) if n != number else '' addElementAttr(ret, self, by, value, alias, saveFunc) # 为元素对象添加别名 break except NoSuchElementException: errorMessage = '页面中没有该元素.NoSuchElementException' break except StaleElementReferenceException: errorMessage = '由于一些原因,多次查找后仍然找不到元素.StaleElementReferenceException' time.sleep(1) except Exception as e: errorMessage = e n = n - 1 eTime = time.time() image = screenShot(self._driver, ret) data = getJsonData(result, func.__name__, cmdParam, errorMessage, '%.3fs' % (eTime - sTime), image, elementAlias, '查找元素', lineNo, 1) putLog(data, self._driver) time.sleep(EasyConfig().afterFindElementWait) return ret
def wrapper(driver, *args, **kwargs): ret = None lineNo = getLineNo() # 获取行号 try: ret = func(driver, *args, **kwargs) except ScreenShotException as e: data = getJsonData(RunResult.ERROR, func.__name__, '', e.message, '', '', '', e.error, lineNo, level) putLog(data, driver._driver) except Exception as e: data = getJsonData(RunResult.ERROR, func.__name__, '', e, '', '', '', '', lineNo, level) putLog(data, driver._driver) finally: return ret
def wrapper(self, *args, **kwargs): ret = None lineNo = getLineNo() # 获取行号 errorMessage = None try: ret = func(self, *args, **kwargs) except ParamsException as e: errorMessage = e except Exception as e: errorMessage = getErrorMessage( e, '[codeException_interface_dec.%s]:' % (func.__name__)) finally: if errorMessage: data = getJsonData(RunResult.ERROR, func.__name__, '', errorMessage, '', '', '', '', lineNo, level, self.sceneId, self.scriptId) putLog(data, self.logger, self.sceneId) return ret
def wrapper(self, *args, **kwargs): ret = None lineNo = getLineNo() # 获取行号 cmdParam = {'list': args, 'dict': kwargs} errorMessage = '' result = RunResult.FALSE sTime = time.time() try: ret = func(self, *args, **kwargs) result = RunResult.TRUE except Exception as e: errorMessage = e.args[0].split('\n')[0][:150] finally: eTime = time.time() data = getJsonData(result, func.__name__, cmdParam, errorMessage, '%.3fs' % (eTime - sTime), '', '', description, lineNo, 2) putLog(data, self._driver) return ret
def wrapper(self, *args, **kwargs): ret = None lineNo = getLineNo() # 获取行号 cmdParam = {'list': args, 'dict': kwargs} msg = '' if 'msg' in kwargs: msg = kwargs['msg'] errorMessage = '' result = RunResult.FALSE sTime = time.time() try: ret = func(self, *args, **kwargs) result = RunResult.TRUE errorMessage = 'TRUE.' except AssertionError as e: result = RunResult.FALSE errorMessage = 'FALSE.%s %s' % (msg, e) except ConnectionRefusedError as e: result = RunResult.ERROR errorMessage = e except Exception as e: result = RunResult.ERROR errorMessage = getErrorMessage(e, '[decorator.assert_dec]:') finally: eTime = time.time() raiseException(errorMessage, ConnectionRefusedError) # 抛出连接拒绝异常 data = getJsonData(result, func.__name__, cmdParam, errorMessage, '%.3fs' % (eTime - sTime), '', '', description, lineNo, 2, self._driver.sceneId, self._driver.logger.scriptId) putLog(data, self._driver.logger, self._driver.sceneId) return ret
def wrapper(self, by, value, alias): def saveFunc(): # 该函数保存查找元素的状态及方法 ret = None try: ret = func(self, by, value, alias) except Exception: pass ret = NoneObjToWebElementNull(self._driver, ret) addElementAttr(ret, self._driver, by, value, alias, saveFunc) # 为元素对象添加别名 return ret ret = None lineNo = getLineNo() # 获取行号 cmdParam = {'list': '', 'dict': {by: value}} errorMessage = '' elementAlias = '' result = RunResult.FAIL sTime = time.time() for n in range(settings.DRIVER['repeatFindTime']): try: ret = func(self, by, value, alias) if isinstance(ret, list) and len(ret) == 0: raise NoSuchElementException() result = RunResult.PASS errorMessage = '在%d次重复查找后定位到元素' % (n + 1) if n != 0 else '' break except NoSuchElementException: # 该异常的原因是页面中没有该元素 errorMessage = '页面中没有该元素.NoSuchElementException' if alias == FINDELEMENT_TYPE[0]: # 当用于断言的时候,结果为PASS result = RunResult.PASS break except StaleElementReferenceException: # 该异常的原因是定位到了元素,但是该元素不在当前可见页面上 errorMessage = '经过%d次重复查找,找到了元素,但是它不在当前可见页面上.StaleElementReferenceException' % ( n + 1) time.sleep(settings.DRIVER['waitForSERException']) except ConnectionRefusedError as e: result = RunResult.ERROR errorMessage = e except UnexpectedAlertPresentException as e: result = RunResult.ERROR errorMessage = '[ERROR-1018]:警告窗引发的异常.' self._driver.switch_to.alert.accept() time.sleep(settings.DRIVER['waitForNAPException']) except Exception as e: result = RunResult.ERROR errorMessage = getErrorMessage(e, '[decorator.findElement_dec]:') eTime = time.time() raiseException(errorMessage, ConnectionRefusedError) # 抛出连接拒绝异常 ret = NoneObjToWebElementNull(self._driver, ret) addElementAttr(ret, self._driver, by, value, alias, saveFunc) # 为元素对象添加别名 image = screenShot(self._driver, ret) # 截图 data = getJsonData(result, func.__name__, cmdParam, errorMessage, '%.3fs' % (eTime - sTime), image, elementAlias, '查找元素', lineNo, 1, self._driver.sceneId, self._driver.logger.scriptId) putLog(data, self._driver.logger, self._driver.sceneId) time.sleep( settings.DRIVER['afterFindElementWait']) # 查找元素后固定等待时间,默认0.5秒 return ret