# UI自动化框架 **Repository Path**: Hellchin/WebUIAutoTest ## Basic Information - **Project Name**: UI自动化框架 - **Description**: 高级Selenium自动化框架具有开箱即用、高度复用和广泛适用的特点,为测试开发人员提供了极大的便利。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-08-01 - **Last Updated**: 2025-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、介绍 ​ 高级Selenium自动化框架具有开箱即用、高度复用和广泛适用的特点,为测试开发人员提供了极大的便利。它提供丰富的库和工具集,支持模块化编程,兼容性强,能够应对各种复杂web项目场景。无论是大型企业的复杂web应用还是小型团队的快速迭代项目,都能够提供稳定可靠的自动化测试支持,提升测试效率和质量,降低开发成本和维护难度。 - **技术栈:Python+Selenium4+Requests+Allure2+Pytest+Jenkins+Pymysql+openpyxl。** - 对chromeManager库进行了重写,将国外地址改为国内地址,实现自动更新下载响应的driver驱动,从而免除了手动下载匹配的麻烦。对代码进行了适配,可以自动识别是否是 Linux 平台,可在配置也页面选择是否强制开启无头模式。 注:UI自动化测试使用PageObjectModel模式进行 # 二、软件架构 --- 软件架构说明 - Commons:公共方法 - auto_ui:ui底层封装(原创) - auto_api: api的底层封装 - Operation_file:操作文件 - Util:其他工具类 - mysql - Config:项目的配置文件 - setting.yaml: 框架整体配置 - database.ini: 数据库连接配置 - PathConfig.py: 框架内文件路径配置 - PageObject:页面对象 - Output:结果页面 - Logs:日志文件, 执行文件 - Reports:测试报告文件 - Documents: 框架实现文档、策略文档 - ScreenShot:截图文件 - TestCase:测试用例 - TestData:测试数据 - TestCase.xlsx:不同的sheet存放不同的api文件 - Services - core - AllureCustormizetion.py: Allure报告定制化(未开始) - EmailNotification.py: 邮件通知 - ExtendedDecorators.py: 扩展装饰器 - tools - allure-x.xx.x.zip: Allure插件 - README.md:帮助文档 - conftest.py:测试用例配置文件 - pytest.ini:pytest框架配置文件 - requirements.txt:依赖库文档 - run.py:运行入口文件 # 三、安装教程 --- ## 3.1 安装依赖库 第一步先安装对应的库,执行按照依赖库命令即可 ```python # 安装依赖库 $ python -m pip install -r ./WebUIAutoTest/requirements.txt # 生成依赖库文件 $ pip freeze > ./WebUIAutoTest/requirements.txt ``` ## 3.2 安装浏览器驱动 下载对应的webdriver浏览器驱动: 目前只封装了chrome的驱动配置,采用ChromeDriverManager第三方库管理,启动时自动下载浏览器器驱动,无需手动配置 注意:由于驱动下载的地址是官方地址,可能会造成下载超时问题,请尝试打开科学上网。 # 四、使用说明 --- 注意:使用allure查看报告,需要在本地安装allure命令行工具并配置环境。 ## 4.1 运行测试用例 启动方式: 1. 启动 run.py 运行文件 2. 列表文本pycharm中运行项目即可, 3. 项目目录下命令行输入 pytest 即可运行 ## 4.2 运行含有allure测试报告的测试用例 使用pytest运行allure测试报告,只需要使用pytest即可,因为pytest.ini文件中已经配置好了allure的配置参数 ## 4.3 查看allure测试报告 启动浏览器去查看allure测试报告,使用 ```python $ allure serve ./reports ``` ## 4.4 选择哪些用例去执行 运行哪些测试用例,冒烟?回归?还是所有用例? 在pytest.ini文件中修改addopts中的-m参数,-m "smoke" 即为冒烟! # 五、封装方法 封装的方法分为两种, - 元素对象方法:元素对象可以执行的方法,通过元素属性进行调用。 - 基类方法:查找元素等基类方法。 以下对这两类方法进行补充: ## 元素对象方法 | 方法 | 解释说明 | | | ------------------------------ | ------------------------------------------------------ | ---- | | = | 文本框输入文本 | | | input_text() | 文本框输入文本 | | | click_element() | 点击元素 | | | image_ocr_identify() | 简单验证码识别 | | | check_alert_text() | | | | set_input_files() | 上传文件 | | | clear_contents() | 清空文本内容 | | | get_element_text() | 获取元素的文本内容 | | | click_radios() | *复选框内容点击* | | | element_is_selected() | 判断元素是否勾选 | | | select_contents_menu() | 选择下拉菜单中的内容 | | | dispose_alert() | 处理页面lert | | | element_whether_invisibility() | 判断元素是否已经消失不见了 | | | switch_iframe() | 判断切换iframe,部分页面的元素在iframe里需要切换后定位 | | | mouse_over() | 鼠标悬停功能 | | | refresh_page() | 刷新当前页面 | | ### 如何使用? ![alt text](image-1.png) 如上,在页面对象中,直接通过元素对象调用即可,本质就是调用该对象的方法。 ## 基类方法 | 方法 | 解释 | | -------------------------- | ---------------------------------------------------------- | | get_url() | 进入指定**url**连接 | | get_current_url_path() | 获取当前页面的**url**的路径 | | set_img_error() | 用例执行失败截图,并且加入**allure**测试报告中 | | set_img_case() | 用例执行完毕截图,并且将截图加入**allure**测试报告中 | | find_element() | 定位元素,支持所有定位单个元素的定位表达式 | | find_elements() | 定位一组元素,返回一个列表 | | element_dyeing() | 将被操作的元素染色 | | __select_wait_method() | 选择元素定位的等待方式 | | wait_element_visible() | 等待元素可见 | | __wait_element_exit() | 等待元素存在 | | __wait_element_clickable() | 等待元素点击 | | wait_element_not_visible() | 等待元素不可见 | | move_element_visible() | 将元素移动到页面可见区域 | | get_handles() | 获取当前页面的句柄 | | swich_window() | **浏览器页面切换**--通过切换句柄实现切换到正在使用的页面上 | | refresh_page() | 刷新当前页面 | | | | | | | | | | ### 如何调用? 在页面对象的类方法中通过self可以直接调用,因为页面对象类直接继承基类,也就继承了他的所有方法。演示如下: ![alt text](image.png) 注意:方法名前双下划线无法调用,该方法为私有方法,也无实际使用场景,所以设为私有方法,无需调用。 # 六、参与贡献 --- 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request