昆山企业网站建设公司/宜兴百度推广公司

昆山企业网站建设公司,宜兴百度推广公司,访问国外网站快的dns,北京事务所网页设计以下是关于 poium 测试库 的详细介绍,涵盖其核心功能、使用方法及与原生 Selenium 的对比,帮助快速掌握这一工具: 1. poium 简介 定位:基于 Selenium 的 Page Object 模式增强库,专注于简化元素定位和页面操作。 核心…

以下是关于 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 对比

功能原生 Seleniumpoium
元素定位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

  1. 目录结构

    复制

    project/├── pages/          # 存放Page Object类├── tests/          # 测试用例├── conftest.py     # pytest配置(如driver初始化)└── utils/          # 工具函数(如数据生成)
  2. 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()
  3. 数据驱动(结合 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 报告集成?

  • 步骤

    1. 安装 pytest-allure

      bash

      复制

      pip install allure-pytest
    2. 运行测试并生成报告:

      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 模式的项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVC摄像头命令推流,推到rv1126里面去

ffmpeg命令查询UVC设备 .\ffmpeg.exe -list_devices true -f dshow -i dummy 上图是查询UVC设备的效果图,画红框的部分是UVC设备的设备名称"USB2.0 PC CAMERA"和设备号 "device_pnp_\\?\usb#vid_1908&pid_2310&mi_00#8&39abfe5&0&a…

Linux中的基本指令(上)

目录 ls指令 判断linux中文件 pwd指令 认识路径 ​编辑 绝对路径/相对路径 cd指令 简要理解用户 理解家目录 echo指令和printf指令 touch指令 mkdir指令 cat指令 tree指令 rmdir指令和rm指令 man指令 cp指令 which指令 alias 指令 date指令 cal指令 理解…

Qt 数据库操作(Sqlite)

数据库简介 关于数据库的基础知识这里就不做介绍了,相关博客可以查看: SQL基础知识 数据库学霸笔记 上面博客都写的比较详细,本文主要介绍如何使用Qt进行数据库相关操作,数据库分为关系型数据库和非关系型数据,关系…

网络安全 api 网络安全 ast技术

随着应用或者API被攻击利用已经越来越多,虽然来自开源组件的漏洞加剧了这一现象的发生,但是,其实主要还是在于应用程序或者API本身没有做好防范,根源在于源代码本身的质量没有严格把控。AST是指Application Security Testing&…

Mac 配置 Maven JDK

不使用 Homebrew,创建指定版本 JDK 1、官网下载指定版本并安装……省略 2、vi ~/.zshrc 同时要检查 bash_profile 是否存在。 if [ -f ~/.bash_profile ] ; thensource ~/.bash_profile fiJAVA_HOME_11/Library/Java/JavaVirtualMachines/jdk-11.0.1…

【病毒分析】熊猫烧香病毒分析及其查杀修复

目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …

sqli-lab靶场学习(八)——Less26-28

前言 25关已经出现了初步的一些关键字过滤,通过双写可以绕过。后面的关卡,我们会遇到更多关键字过滤,需要各种技巧绕过。 Less26 第26关写了会过滤空格和注释符。有很多的答案,会用%a0替代空格,但据说这是sqli-labs部…

python:VOC格式数据集转换为YOLO数据集格式

作者:CSDN _养乐多_ 本文将介绍如何将目标检测中常用的VOC格式数据集转换为YOLO数据集,并进行数据集比例划分,从而方便的进行YOLO目标检测。 如果不想分两步,可以直接看第三节代码。 文章目录 一、将VOC格式数据集转换为YOLO格…

Docker容器安装软件(完整版)

文章目录 一、安装Docker1.1 docker 相关的命令1.2 配置镜像加速 二. 安装es2.1 创建网络2.2 拉取镜像2.3 创建挂载点目录2.4 部署单点es,创建es容器2.5 编写elasticsearch.yml2.6 重启es容器2.7 测试Elasticsearch是否安装成功 三. 基于Docker安装Kibana3.1 拉取镜…

NetAssist 5.0.14网络助手基础使用及自动应答使用方案

以下是NetAssist v5.0.14自动应答功能的详细使用步骤: 一、基础准备: 工具下载网址页面:https://www.cmsoft.cn/resource/102.html 下载安装好后,根据需要可以创建多个server,双击程序图标运行即可,下面…

node.js-node.js作为服务器,前端使用WebSocket(单个TCP连接上进行全双工通讯的协议)

1.WebSocket全双工通信协议 WebSocket是HTML5开始提供的一种单个TCP连接上进行全双工通讯的协议。让客户端和服务器间的数据交互变得简单,允许服务端向客户端主动推送数据。浏览器和服务器间只需要完成一次握手,两者间创建持久性的连接,并进行…

java后端开发day31--集合进阶(一)-----Collection集合List集合数据结构1

(以下内容全部来自上述课程) 1.集合体系结构 List系列集合:添加的元素是有序、可重复、有索引。 Set系列集合:添加的元素是无序、不重复、无索引。 2.Collection集合 Collection是单列集合的祖宗接口(不可直接创建…

Qt配置OpenGL相机踩的坑

项目根据LearnOpenGL配置Qt的相机,更新view矩阵和project矩阵的位移向量变得很大,我设置的明明相机位置是(0,0,3),理想的位移向量刚好是相反数(0,0,-3),对应的view矩阵位置向量可以变成(0,0,1200)…离模型非常远矩阵模型也看不见&…

关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】

问题需求 目录和文件结构如下: E:\Dir_Level1 │ Level1.txt │ └─Dir_Level2│ Level2.txt│ master.xlsx│└─Dir_Level3Level3.txt现在要在master.xlsx点击单元格进而访问Level1.txt、Level2.txt、Level3.txt这些文件。 方法一:“单元格右键…

聚类中的相似矩阵和拉普拉斯矩阵

前言(可以略过) 最近在看的是关于聚类的论文,之前对聚类的步骤和相关内容不太了解,为了读懂论文就去学习了一下,这里将自己的理解记录下来。学习的不全面,主要是为了看懂论文,后续如果有涉及到聚…

前端笔记 --- vue框架

目录 基础知识 指令的修饰符 计算属性 watch侦听器的写法 Vue的生命周期 工程化开发&脚手架 VUE CLI 组件注册的方式 scoped样式冲突与原理 data 组件之间的关系和组件通信 v-model详解 sync修饰符 Dom介绍 操作HTML标签 总结 ref 和 $refs $nextTick 自…

智能双剑合璧:基于语音识别与大模型的技术沙龙笔记整理实战

智能双剑合璧:基于语音识别与大模型的技术沙龙笔记整理实战 ——记一次网络安全技术沙龙的高效知识沉淀 引言:当网络安全遇上AI生产力工具 在绿盟科技举办的"AI驱动的未来网络安全"内部技术沙龙中,笔者亲历了一场关于网络安全攻…

数据结构(蓝桥杯常考点)

数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…

第56天:Web攻防-SQL注入增删改查盲注延时布尔报错有无回显错误处理审计复盘

#知识点 1、Web攻防-SQL注入-操作方法&增删改查 2、Web攻防-SQL注入-布尔&延时&报错&盲注 一、增删改查 1、功能:数据查询 查询:SELECT * FROM news where id$id 2、功能:新增用户,添加新闻等 增加:IN…

串口通信函数汇总-ing

谢谢各位佬的阅读,本文是我自己的理解,如果您发现错误,麻烦请您指出,谢谢 首先谈谈我自己对于串口的理解,随便拿一个嵌入式的板子,它上面有两个引脚,一个是rx,一个是tx,r…