当前位置: 首页 > news >正文

Python+Selenium+Pytest+Allure PO模式UI自动化框架

一、框架结构

  • allure-report:测试报告
  • base:定位元素封装
  • data:数据
  • log:日志文件
  • page:页面封装文件夹
  • report:缓存报告
  • testcases:测试用例层
  • utils:工具类
  • run.py:执行文件

在这里插入图片描述

二、封装类

base.py

import datetime
import timefrom selenium.webdriver import Keys, ActionChains
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from utils.log_util import loggerclass BasePage:def __init__(self, driver):self.driver = driverself.driver.maximize_window()self.driver.implicitly_wait(10)  # 隐式等待self.wait = WebDriverWait(self.driver, 10)  # 显示等待self.actions = ActionChains(self.driver)  # 鼠标动作链初始化# 这是基础的find_element封装# def find_element(self, locator):#     logger.info(f"当前定位{locator}")#     return self.driver.find_element(*locator)def find_element(self, locator, condition='visibility', retry=1):""":param locator: 元素定位信息:param condition: 默认是visibility:param retry: 重试次数,默认是1,重试一次:return:"""for time in range(retry + 1):try:logger.info(f"定位元素{locator}")if condition == 'visibility':node = self.wait.until(EC.visibility_of_element_located(locator))else:node = self.wait.until(EC.presence_of_element_located(locator))return nodeexcept Exception as e:error_info = f"{locator}定位失败,错误信息{e}"logger.error(error_info)if time < retry:logger.info(f"正在重新定位,当前重试次数:{time + 1}")else:raise Exception(error_info)def find_elements(self, locator, retry=1):"""返回列表节点:param locator: 元素定位信息:param retry: 重试次数,默认是1,重试一次:return:"""for time in range(retry + 1):try:logger.info(f"定位元素{locator}")node = self.wait.until(lambda x: x.find_elements(*locator))return nodeexcept Exception as e:error_info = f"{locator}定位失败,错误信息{e}"logger.error(error_info)if time < retry:logger.info(f"正在重新定位,当前重试次数:{time + 1}")else:raise Exception(error_info)def send_keys(self, locator, value, enter=False):"""封装输入内容函数:param locator: 元素定位信息:param value: 输入项的内容:return:"""# 1. 先定位元素node = self.find_element(locator)# 2. 清空输入框node.clear()# 3. 输入内容node.send_keys(value)logger.info(f"输入内容为:{value}")if enter:# 调用键盘的回车键node.send_keys(Keys.ENTER)logger.info("点击回车键")def click(self, locator):"""定位元素并点击:param locator: 元素定位信息:return:"""# 1. 先定位元素node = self.find_element(locator)# 2. 点击node.click()logger.info("点击按钮")def get_url(self, url=''):"""请求url:param url: 网址:return:"""self.driver.get(url)logger.info(f"打开网址{url}")def close_driver(self):"""关闭浏览器:return:"""logger.info("关闭浏览器")self.driver.close()def quit_driver(self):"""退出浏览器:return:"""logger.info("退出浏览器")self.driver.quit()def refresh(self):"""刷新浏览器:return:"""self.driver.refresh()logger.info("刷新浏览器")def switch_to_window(self, to_parent_window=False):"""切换窗口:param to_parent_window: 是否回到主窗口:return:"""total = self.driver.window_handlesif to_parent_window:# 切换到主窗口self

http://www.mrgr.cn/news/100509.html

相关文章:

  • Java 富文本转word(支持水印)
  • 关于Spring Boot构建项目的相关知识
  • ubuntu 安装ollama后,如何让外网访问?
  • 继续 那个错误分析
  • JVM常见的垃圾回收器
  • 网络:手写HTTP
  • cocos creator使用jenkins打包流程,打包webmobile
  • Python3:Jupyter Notebook 安装和配置
  • Crawl4AI 部署安装及 n8n 调用,实现自动化工作流(保证好使)
  • 【视频生成模型】通义万相Wan2.1模型本地部署和LoRA微调
  • 在 Cursor 中 配置 GitHub MCP Server
  • 【3DMax脚本MaxScript开发:创建高效模型虚拟体绑定和材质管理系统,从3DMax到Unreal和Unity引擎_系列第一篇】
  • 【RabbitMQ消息队列】详解(一)
  • 从视频中学习:从Humanoid-X、UH-1的自动打字幕,到首个人形VLA Humanoid-VLA(自监督数据增强且整合第一人称视角)
  • WPF常用技巧汇总 - Part 2
  • DeepSeek 多头潜在注意力(Multi-Head Latent Attention, MLA)技术
  • STM32F103_HAL库+寄存器学习笔记21 - CAN接收过滤器:CPU减负神器,提升系统效率的第一道防线
  • Drivestduio 代码笔记与理解
  • 论文检索相关网站
  • 大模型API密钥的环境变量配置(大模型API KEY管理)(将密钥存储在环境变量)(python-dotenv)(密钥管理)环境变量设置环境变量