diff --git a/API执行演示.gif b/API执行演示.gif new file mode 100644 index 00000000..163a42f1 Binary files /dev/null and b/API执行演示.gif differ diff --git a/MangoActuator/autotest/ui/base_tools/__init__.py b/MangoActuator/autotest/ui/base_tools/__init__.py index 06860148..67dc990c 100644 --- a/MangoActuator/autotest/ui/base_tools/__init__.py +++ b/MangoActuator/autotest/ui/base_tools/__init__.py @@ -4,8 +4,8 @@ # @Time : 2023-07-15 11:57 # @Author : 毛鹏 -from autotest.ui.base_tools.web import WebDevice from autotest.ui.base_tools.android import AndroidDriver +from autotest.ui.base_tools.web import WebDevice from enums.tools_enum import StatusEnum from enums.ui_enum import ElementOperationEnum, DriveTypeEnum from exceptions.tools_exception import SyntaxErrorError, MysqlQueryIsNullError @@ -13,6 +13,7 @@ from exceptions.ui_exception import * from models.socket_model.ui_model import ElementResultModel, ElementModel from tools.decorator.async_retry import async_retry from tools.desktop.signal_send import SignalSend +from tools.log_collector import log from tools.message.error_msg import * @@ -76,6 +77,7 @@ class ElementMain(WebDevice, AndroidDriver): elif self.drive_type == DriveTypeEnum.DESKTOP.value: pass else: + log.error('不存在的设备类型') raise Exception('不存在的设备类型') async def assertion_element(self): @@ -88,6 +90,7 @@ class ElementMain(WebDevice, AndroidDriver): elif self.drive_type == DriveTypeEnum.DESKTOP.value: pass else: + log.error('不存在的设备类型') raise Exception('不存在的设备类型') async def __ope(self, name, ope_type): diff --git a/MangoActuator/autotest/ui/base_tools/android/__init__.py b/MangoActuator/autotest/ui/base_tools/android/__init__.py index e3160f24..1027afdd 100644 --- a/MangoActuator/autotest/ui/base_tools/android/__init__.py +++ b/MangoActuator/autotest/ui/base_tools/android/__init__.py @@ -18,6 +18,7 @@ from exceptions.ui_exception import * from models.socket_model.ui_model import ElementModel, ElementResultModel from tools.assertion.sql_assertion import SqlAssertion from tools.message.error_msg import * +from tools.public_methods import sync_global_exception class AndroidDriver(UiautomatorEquipment, @@ -60,7 +61,7 @@ class AndroidDriver(UiautomatorEquipment, except UiObjectNotFoundError as error: raise ElementLocatorError(*ERROR_MSG_0032, value=(self.element_model.name,), error=error, ) except Exception as error: - print(error) + sync_global_exception(error, False) else: if 'locating' in self.element_model.ope_value: del self.element_model.ope_value['locating'] diff --git a/MangoActuator/autotest/ui/base_tools/android/application.py b/MangoActuator/autotest/ui/base_tools/android/application.py index e39e995b..8956ae74 100644 --- a/MangoActuator/autotest/ui/base_tools/android/application.py +++ b/MangoActuator/autotest/ui/base_tools/android/application.py @@ -4,7 +4,6 @@ # @Time : 2023-09-09 23:17 # @Author : 毛鹏 import time - import uiautomator2 from autotest.ui.base_tools.base_data import BaseData diff --git a/MangoActuator/autotest/ui/base_tools/android/equipment.py b/MangoActuator/autotest/ui/base_tools/android/equipment.py index 4c3038f7..789c6267 100644 --- a/MangoActuator/autotest/ui/base_tools/android/equipment.py +++ b/MangoActuator/autotest/ui/base_tools/android/equipment.py @@ -29,6 +29,7 @@ class UiautomatorEquipment(BaseData): def a_swipe_left(self): """获取屏幕开关状态""" self.android.info.get('screenOn') + # # def a_home(self): # """返回首页""" diff --git a/MangoActuator/autotest/ui/base_tools/driver_object.py b/MangoActuator/autotest/ui/base_tools/driver_object.py index 80423a57..53506ef6 100644 --- a/MangoActuator/autotest/ui/base_tools/driver_object.py +++ b/MangoActuator/autotest/ui/base_tools/driver_object.py @@ -29,7 +29,7 @@ from tools.data_processor.sql_cache import SqlCache from tools.desktop.signal_send import SignalSend from tools.log_collector import log from tools.message.error_msg import ERROR_MSG_0008, ERROR_MSG_0009, ERROR_MSG_0042, ERROR_MSG_0045, ERROR_MSG_0047 - +from tools.public_methods import async_global_exception """ python -m uiautomator2 init python -m weditor @@ -180,7 +180,7 @@ class DriverObject: await ClientWebSocket.async_send(msg="发送录制接口", func_name=ApiSocketEnum.RECORDING_API.value, func_args=api_info) except Exception as error: - log.error(error) + await async_global_exception(error) async def test_main(): diff --git a/MangoActuator/autotest/ui/service/case_run.py b/MangoActuator/autotest/ui/service/case_run.py index c25af02c..ba29be53 100644 --- a/MangoActuator/autotest/ui/service/case_run.py +++ b/MangoActuator/autotest/ui/service/case_run.py @@ -8,11 +8,10 @@ import asyncio from autotest.ui.base_tools.driver_object import DriverObject from autotest.ui.service.cases import CasesMain -from enums.tools_enum import ClientTypeEnum from enums.ui_enum import DriveTypeEnum from models.socket_model.ui_model import CaseModel -from service.socket_client import ClientWebSocket from tools.log_collector import log +from tools.public_methods import async_global_exception class CaseRun(DriverObject): @@ -55,9 +54,7 @@ class CaseRun(DriverObject): log.error('自动化类型不存在,请联系管理员检查!') await obj.case_page_step() except Exception as error: - log.error(str(error)) - await ClientWebSocket.async_send(code=300, - msg="执行元素步骤时发生未知异常,请检查数据或者联系管理员", - is_notice=ClientTypeEnum.WEB.value) + await async_global_exception(error) + finally: self.running_tasks -= 1 diff --git a/MangoActuator/autotest/ui/service/cases.py b/MangoActuator/autotest/ui/service/cases.py index e47ff379..0dcd0659 100644 --- a/MangoActuator/autotest/ui/service/cases.py +++ b/MangoActuator/autotest/ui/service/cases.py @@ -15,7 +15,7 @@ from models.socket_model.ui_model import CaseModel, CaseResultModel, PageStepsMo from service.socket_client import ClientWebSocket from tools.desktop.signal_send import SignalSend from tools.log_collector import log - +from tools.public_methods import async_global_exception class CasesMain(StepsMain): @@ -54,7 +54,7 @@ class CasesMain(StepsMain): except MangoActuatorError as error: self.case_result.error_message = f'用例<{self.case_model.name}> 失败原因:{error.msg}' self.case_result.status = StatusEnum.FAIL.value - log.error(error.msg) + log.warning(error.msg) break else: if page_steps_result_model.status: @@ -62,17 +62,14 @@ class CasesMain(StepsMain): else: self.case_result.error_message = f'用例<{self.case_model.name}> 失败原因:{page_steps_result_model.error_message}' self.case_result.status = StatusEnum.FAIL.value - log.error(page_steps_result_model.error_message) + log.warning(page_steps_result_model.error_message) break await self.case_posterior(self.case_model.posterior_sql) except MangoActuatorError as error: self.case_result.error_message = f'用例<{self.case_model.name}> 失败原因:{error.msg}' self.case_result.status = StatusEnum.FAIL.value except Exception as error: - log.error(str(error)) - await ClientWebSocket.async_send(code=300, - msg="执行元素步骤时发生未知异常,请检查数据或者联系管理员", - is_notice=ClientTypeEnum.WEB.value) + await async_global_exception(error) else: msg = self.case_result.error_message if self.case_result.error_message else f'用例<{self.case_model.name}>测试完成' await ClientWebSocket.async_send( diff --git a/MangoActuator/autotest/ui/service/steps.py b/MangoActuator/autotest/ui/service/steps.py index ff5700af..8b0514d9 100644 --- a/MangoActuator/autotest/ui/service/steps.py +++ b/MangoActuator/autotest/ui/service/steps.py @@ -73,7 +73,7 @@ class StepsMain(ElementMain): return self.page_step_result_model async def __error(self, error: MangoActuatorError): - log.error( + log.warning( f'元素操作失败,element_model:{self.element_model.dict()},element_test_result:{self.element_test_result.dict()},error:{error.msg}') path = rf'{InitPath.failure_screenshot_file}\{self.element_model.name}{RandomTimeData.get_deta_hms()}.jpg' SignalSend.notice_signal_c(f'''元素名称:{self.element_test_result.ele_name} diff --git a/MangoActuator/dd.md b/MangoActuator/dd.md new file mode 100644 index 00000000..36485933 --- /dev/null +++ b/MangoActuator/dd.md @@ -0,0 +1,95 @@ +# ✨️ 概述 + +DrissionPage 是一个基于 python 的网页自动化工具。 + +它既能控制浏览器,也能收发数据包,还能把两者合而为一。 + +可兼顾浏览器自动化的便利性和 requests 的高效率。 + +它功能强大,内置无数人性化设计和便捷功能。 + +它的语法简洁而优雅,代码量少,对新手友好。 + +--- + +官方网站:[https://drissionpage.cn](https://drissionpage.cn) + +star fork + +项目地址:[gitee](https://gitee.com/g1879/DrissionPage) | [github](https://github.com/g1879/DrissionPage) + +您的星星是对我最大的支持💖 + +--- + +支持系统:Windows、Linux、Mac + +python 版本:3.6 及以上 + +支持浏览器:Chromium 内核浏览器(如 Chrome 和 Edge),electron 应用 + +--- + +# 🛠 如何使用 + +**📖 使用文档:** [点击查看](https://g1879.gitee.io/drissionpagedocs) + +**交流 QQ 群:** 636361957 + +--- + +# 💡 理念 + +简洁而强大! + +--- + +# ☀️ 特性和亮点 + +作者经过长期实践,踩过无数坑,总结出的经验全写到这个库里了。 + +## 🎇 强大的自研内核 + +本库采用全自研的内核,内置无数实用功能,对常用功能作了整合和优化,对比 selenium,有以下优点: + +- 不基于 webdriver +- 无需为不同版本的浏览器下载不同的驱动 +- 运行速度更快 +- 可以跨`