예제 #1
0
        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
예제 #2
0
 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
예제 #3
0
        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
예제 #4
0
        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
예제 #5
0
        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
예제 #6
0
	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)
예제 #7
0
    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
예제 #8
0
 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
예제 #9
0
 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
예제 #10
0
        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
예제 #11
0
        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
예제 #12
0
    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