UI自动化:poium测试库
以下是关于 poium 测试库 的详细介绍,涵盖其核心功能、使用方法及与原生 Selenium 的对比,帮助快速掌握这一工具:
1. poium 简介
-
定位:基于 Selenium 的 Page Object 模式增强库,专注于简化元素定位和页面操作。
-
核心目标:
-
通过简洁的 API 提升代码可读性。
-
减少样板代码,提升测试脚本开发效率。
-
内置智能等待、链式调用等实用功能。
-
-
适用场景:Web 自动化测试(尤其适合中大型项目需要维护 Page Object 的场景)。
2. 安装 poium
bash
复制
pip install poium
3. 核心功能与使用
3.1 元素定位
-
支持多种定位方式(语法更简洁):
python
复制
from poium import Page, Elementclass LoginPage(Page):username = Element(id_="username", describe="用户名输入框") # id定位password = Element(css=".password", describe="密码输入框") # CSS选择器submit = Element(xpath="//button[@type='submit']", describe="提交按钮")
3.2 链式操作
-
流式调用提升代码可读性:
python
复制
LoginPage().username.input("admin").password.input("123456").submit.click()
3.3 智能等待
-
自动处理元素加载等待,无需手动编写
WebDriverWait:python
复制
# 元素默认等待时间(全局配置) from poium import config config.timeout = 10 # 设置全局等待时间为10秒# 单个元素自定义等待 error_msg = Element(css=".error", timeout=5)
3.4 元素操作扩展
-
内置丰富操作方法:
python
复制
element.input("text") # 输入文本 element.click() # 点击 element.clear() # 清空内容 element.get_text() # 获取文本 element.is_displayed() # 判断元素是否可见
3.5 断言增强
-
集成常用断言方法:
python
复制
from poium import assertsasserts.assert_title("首页") # 断言页面标题 asserts.assert_element_text(login.submit, "登录") # 断言元素文本
4. 完整示例
Page Object 定义
python
复制
from poium import Page, Elementclass BaiduSearchPage(Page):search_input = Element(id_="kw", describe="搜索框")search_button = Element(id_="su", describe="搜索按钮")def search(self, keyword):self.search_input.input(keyword)self.search_button.click()
测试用例(结合 pytest)
python
复制
def test_baidu_search():page = BaiduSearchPage()page.open("https://www.baidu.com")page.search("poium")asserts.assert_title_contains("poium")
5. 与原生 Selenium 对比
| 功能 | 原生 Selenium | poium |
|---|---|---|
| 元素定位 | driver.find_element(By.ID, "kw") | Element(id_="kw") |
| 元素操作 | element.send_keys("text") | element.input("text") |
| 等待处理 | 需手动编写 WebDriverWait | 自动智能等待(可配置超时) |
| 代码结构 | 需自行封装 Page Object | 内置 Page 类,直接继承即可 |
| 断言 | 结合 unittest 或 pytest 断言 | 内置 asserts 模块提供专用断言方法 |
6. 实践
poium + pytest + Allure
-
目录结构:
复制
project/├── pages/ # 存放Page Object类├── tests/ # 测试用例├── conftest.py # pytest配置(如driver初始化)└── utils/ # 工具函数(如数据生成)
-
Driver 管理:
python
复制
# conftest.py import pytest from selenium import webdriver from poium import Browser@pytest.fixture(scope="session") def driver():driver = webdriver.Chrome()yield Browser(driver) # 将原生driver封装为poium的Browser对象driver.quit() - 数据驱动(结合
pytest.mark.parametrize):
python
复制
import pytest@pytest.mark.parametrize("keyword", ["selenium", "poium", "pytest"])
def test_search(driver, keyword):page = BaiduSearchPage(driver)page.open("https://www.baidu.com")page.search(keyword)asserts.assert_title_contains(keyword)
seldom + poium
import seldom
from poium import Page, Elementclass BaiduPage(Page):"""baidu page"""search_input = Element(id_="kw")search_button = Element(id_="su")class BaiduTest(seldom.TestCase):"""Baidu search test case"""def test_case(self):"""A simple test"""page = BaiduPage(self.driver, print_log=True)page.open("https://www.baidu.com")page.search_input.send_keys("seldom")page.search_button.click()self.assertTitle("seldom_百度搜索")if __name__ == '__main__':seldom.main(browser="chrome")
7. 常见问题
Q1:如何处理动态元素(如弹窗)?
-
方案:通过
Element的timeout参数调整等待时间,或结合is_displayed()判断。python
复制
class PopupPage(Page):confirm_btn = Element(css=".confirm", timeout=5)def test_handle_popup():if PopupPage().confirm_btn.is_displayed():PopupPage().confirm_btn.click()
Q2:如何与 Allure 报告集成?
-
步骤:
-
安装
pytest-allure:bash
复制
pip install allure-pytest -
运行测试并生成报告:
bash
复制
pytest --alluredir=./allure-results allure serve ./allure-results
-
Q3:如何复用公共页面组件?
-
方案:通过类继承或 Mixin 模式复用组件。
python
复制
class HeaderComponent(Page):home_link = Element(link_text="首页")class HomePage(HeaderComponent):search_input = Element(id_="search")
8.总结
-
poium 优势:简化元素操作、内置智能等待、提升代码可维护性,适合中大型项目。
-
适用项目:需要长期维护的 Web 自动化测试,尤其是遵循 Page Object 模式的项目。
相关文章:
UI自动化:poium测试库
以下是关于 poium 测试库 的详细介绍,涵盖其核心功能、使用方法及与原生 Selenium 的对比,帮助快速掌握这一工具: 1. poium 简介 定位:基于 Selenium 的 Page Object 模式增强库,专注于简化元素定位和页面操作。 核心…...
树莓集团落子海南,如何重构数字产业生态体系
树莓集团在海南的布局,是其整体商业战略中的关键一环。这背后,是对政策机遇、产业协同、以及区域优势的深度考量。 政策机遇 海南自贸港建设带来前所未有的政策红利,包括贸易、投资、资金等方面的自由便利。树莓集团紧抓这一机遇࿰…...
5G基本概念
作者:私语茶馆 1. 5G应用场景概述 1.1.5G应用场景 ITU域2015年定义了三大应用场景:eMBB(增强型移动宽带)、uRLLC(低时延高可靠通信)、mMTC(海量物联网通信); emBB:Enhanced Mobile Broadband ,移动互联网应用,是4G MBB(移动宽带)的升级,主要侧重于网络速率、带…...
PH热榜 | 2025-03-12
1. Fluently 标语:开始说英语,就像说你的母语一样流利。 介绍:想象一下,有一个像人类一样的英语教练,全天候在线、价格却便宜15倍。这就是 Fluently 🚀 纠正你的错误,提升你的词汇量、发音和语…...
Python Web项目的服务器部署
一.部署运行 1.虚拟环境的安装:(一行一行运行) wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh bash miniconda.sh -b -p /opt/miniconda3 echo export PATH"/opt/miniconda3/bin:$PAT…...
[项目]基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆
基于FreeRTOS的STM32四轴飞行器: 八.遥控器摇杆 一.摇杆数据的扫描二.处理摇杆数据三.微调按键处理 一.摇杆数据的扫描 下面摇杆初始化时,启动了ADC-DMA进行了采集,已经开始转换直接将数据通过DMA存入buff数组中: static uint16_t buff[4] …...
附下载 | 2024 OWASP Top 10 基础设施安全风险.pdf
《2024 OWASP Top 10 基础设施安全风险》报告,由OWASP(开放网络应用安全项目)发布,旨在提升企业和组织对基础设施安全风险、威胁与漏洞的意识,并提供高质量的信息和最佳实践建议。报告列出了2024年最重要的10大基础设施…...
Pytorch的一小步,昇腾芯片的一大步
Pytorch的一小步,昇腾芯片的一大步 相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片! 1、 发生了什么事儿? 在2023年10月4日PyTorch 2.1版本的发布博客上,PyTorch介绍的beta版本…...
C语言操作MySQL从入门到精通
大家好,我是 V 哥。今天给大家整理的内容是关于使用 C 语言操作 MySQL 数据库的详细介绍,从入门到精通,并配有案例代码和注释,帮助小白快速上手。 基本操作 1. 环境准备 在开始之前,你需要安装 MySQL 数据库和 MySQ…...
【从零开始学习计算机科学】编译原理(五)语法制导翻译
【从零开始学习计算机科学】编译原理(五)语法制导翻译 语法制导翻译语法制导定义SDDSDD的求值顺序两类重要的SDD语法制导的翻译方案SDTSDT的实现L属性定义的SDT左递归翻译方案语法制导翻译 语法表述的是语言的形式,或者说是语言的样子和结构。而程序设计语言中另一方面,是…...
uniapp uview 1.0 跨域h5配置多个代理、如何请求接口
参考文章:uniapp uView1.0跨域h5配置多个代理 官方手册:http 请求 项目中使用: 参考其他博主的文章是在manifest.json中配置代理,但在官方的手册中是直接在script请求的,我尝试请求了下没问题,上线后也不…...
化工厂防爆气象站:为石油化工、天然气等领域提供安全保障
【TH-FB02】在石油化工、天然气等高危行业中,安全生产是至关重要的。这些行业常常面临着易燃易爆、有毒有害等潜在风险,因此,对气象条件的监测和预警显得尤为重要。化工厂防爆气象站作为一种专门设计用于这些特殊环境的气象监测设备ÿ…...
Android Glide 缓存模块源码深度解析
一、引言 在 Android 开发领域,图片加载是一个极为常见且关键的功能。Glide 作为一款被广泛使用的图片加载库,其缓存模块是提升图片加载效率和性能的核心组件。合理的缓存机制能够显著减少网络请求,降低流量消耗,同时加快图片显示…...
Mac安装Neo4j图数据库
通过Homebrew 安装(推荐) 打开mac终端: 1. 安装 Homebrew(如果尚未安装) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. 安装 Neo4j brew insta…...
《A Gentle Introduction to Graph Neural Networks》-GNN的综述性论文
目录 一、什么数据可以表示成一张图 (1)什么是图? (2)如何表示图的属性 (3)images as graphs(将图片表示为图) (4)text as graphs(…...
[023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级
SpringCloud学习大纲 一、需求说明: 需求1:通过fallback属性进行统一配置 a.问题分析: 1.需要实现cloudalibaba-consumer-nacos-order83模块通过OpenFeign调用cloudalibaba-provider-payment9001 83服务通过OpenFeign调用 9001微服务&…...
设计模式-结构型模式-装饰器模式
概述 装饰器模式 : Decorator Pattern : 是一种结构型设计模式. 作用 : 允许你动态地给对象添加功能或职责,而无需修改其原始类的代码,非常的符合 开闭原则。 实现思路 :通过创建一个包装对象(即装饰器),来…...
RK3588 编译 openssl
在编译 OpenSSL 时,你需要确保你的系统环境已经配置好了所有必要的依赖和编译工具。下面是一般步骤和一些常见问题的解决方案,特别是在使用 RK3588 这类的 ARM 处理器上。 1. 安装依赖 首先,你需要安装编译 OpenSSL 所需的依赖。这通常包括编译器(如 GCC)、make 工具、Per…...
Git前言(版本控制)
1.Git 目前世界上最先进的分布式版本控制系统。 git官网:https://git-scm.com/ 2.版本控制 2.1什么是版本控制 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容修改历史,方便查看更改历史记录备份以便恢复以前…...
visual studio配置opencv
文章目录 step1 下载opencvstep2 配置包含目录step 3 配置链接器step4 配置环境变量并重启vs2022step5 检查代码 step1 下载opencv 下载 opencv-4.8.0-windows.exe https://cloud.189.cn/web/share?codefUnqEb7naUra step2 配置包含目录 step 3 配置链接器 step4 配置环境变…...
docker修改daemon.json文件后无法启动
1.问题描述 使用阿里云docker镜像安装的docker,安装成功后默认可以启动。但是修改daemon.json配置后docker服务无法启动,提示如下错误: 从上图发现,docker服务默认使用阿里docker镜像仓库 2.解决方法 根据提示找到docker服务目…...
Linux网络:网络与操作系统1
本文是介绍网络的基本结构,以及和OS之间有什么关系 OSI七层模型 引入 使用网络是为了解决信息的长距离传送,那就需要解决四个问题: 接收方如何使用数据传输的可靠性主机如何定位数据包在局域网如何转发 人们选择用网络协议(t…...
Manus(一种AI代理或自动化工具)与DeepSeek(一种强大的语言模型或AI能力)结合使用任务自动化和智能决策
一、Manus与DeepSeek差异 十分好奇DeepSeek和Manus究竟谁更厉害些,DeepSeek是知识型大脑,Manus则是全能型执行者。即DeepSeek专注于语言处理、知识整合与专业文本生成。其核心优势在于海量参数支持的深度学习和知识推理能力,例如撰写论文、润…...
Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)
九、匿名函数 lambda表达式 语法规则: 变量 lambda 参数1,参数2,…:返回值 例:用lambda简化下述操作 def func(a,b):return ab ret func(1, 2) print(ret)代码: fn lambda a,b:ab print(fn) print(fn(12,13))结果: <fun…...
姚安娜新剧瘦了一圈,《仁心俱乐部》急诊医生顾诗宜在线上岗
《仁心俱乐部》在芒果 TV 播出,湖南卫视金鹰独播剧场也随之播出,这一剧集受到了不少观众的关注。姚安娜在剧中饰演的急诊科医生顾诗宜,她为患者检查身体时动作娴熟,与患者沟通时展现出的耐心和专注,都展现出很高的专业…...
【PyCharm】Python和PyCharm的相互关系和使用联动介绍
李升伟 整理 Python 是一种广泛使用的编程语言,而 PyCharm 是 JetBrains 开发的专门用于 Python 开发的集成开发环境(IDE)。以下是它们的相互关系和使用联动的介绍: 1. Python 和 PyCharm 的关系 Python:一种解释型、…...
【ES6】基础特性总结
概述 仅个人使用,复习ES6的笔记,比较粗糙,仅适用于浏览器端。 数据类型 ES6(ECMAScript 2015)引入了一些新的数据类型和对现有数据类型的扩展。以下是ES6中数据类型的一个简要总结表格: 数据类型描述Nu…...
串口数据记录仪DIY,体积小,全开源
作用 产品到客户现场出现异常情况,这个时候就需要一个日志记录仪、黑匣子,可以记录产品的工作情况,当出现异常时,可以搜集到上下文的数据,从而判断问题原因。 之前从网上买过,但是出现过丢数据的情况耽误…...
无障碍阅读(Web Accessibility)NVDA打开朗读查看器后,enter键不生效的原因
用NVDA测试Web Accessibility时,打开朗读查看器,enter键会无效,而不打开测试器,就没有问题,很大原因是被应用的元素不是可聚焦的,解决方法尝试: 将标签改为可聚焦的语义化标签,如 b…...
基于docker+python+paddleocr构建自己本地化ocr服务
1、使用FastAPI创建服务实例 1.1、正常程序 from fastapi import FastAPI, UploadFile, File, HTTPException from typing import List from paddleocr import PaddleOCR import numpy as np from PIL import Image import io import loggingapp FastAPI(title"游戏截图…...
