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 對比

功能原生 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.pswp.cn/pingmian/72141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72141.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#結構體(Struct)詳解

在 C# 中,?結構體(struct)? 是一種值類型數據類型,適用于封裝小型數據組。與類(class)不同,結構體在棧(Stack)上分配內存,且賦值時會發生值復制。以下是結構…

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指令 理解…

多數元素——面試經典150題(力扣)

題目 給定一個大小為 n 的數組 nums ,返回其中的多數元素。多數元素是指在數組中出現次數 大于 ? n/2 ? 的元素。 你可以假設數組是非空的,并且給定的數組總是存在多數元素。 示例 1: 輸入:nums [3,2,3] 輸出:3 …

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…

【每日學點HarmonyOS Next知識】拖拽調整列表順序、tab回彈、自定義彈窗this、狀態變量修飾枚舉

1、HarmonyOS 功能實現(拖拽調整列表順序)? 可參考: import curves from ohos.curves; import Curves from ohos.curvesEntry Component struct ListItemExample {State private arr: number[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]…

Django部署Filemanagement

Pycharm搭建項目安裝虛擬環境 mysqlclient對mysql的安裝,配置有要求 pymsql偽裝成mysqlclient,pymysql可以操縱mysql pip install pymysql操作sql5.7 mysql8.0會出現與pycharm不兼容問題,會報錯,所以降到5.7 # 進入mysql 需要…

【病毒分析】熊貓燒香病毒分析及其查殺修復

目錄 前言 一、樣本概況 1.1 樣本信息 1.2 測試環境及工具 1.3 分析目標 二、具體行為分析 2.1 主要行為 2.1.1 惡意程序對用戶造成的危害 2.2 惡意代碼分析 2.2.1 加固后的惡意代碼樹結構圖(是否有加固) 2.2.2 惡意程序的代碼分析片段 三、解決方案(或總結) 3.1 …

Spring Boot集成Spring Statemachine

Spring Statemachine 是 Spring 框架下的一個模塊,用于簡化狀態機的創建和管理,它允許開發者使用 Spring 的特性(如依賴注入、AOP 等)來構建復雜的狀態機應用。以下是關于 Spring Statemachine 的詳細介紹: 主要特性 …

數組總和 (leetcode 40

leetcode系列 文章目錄 一、核心操作二、外層配合操作三、核心模式代碼總結 去重方式和之前三數之和一樣,也可以用used數組去重,但本次嘗試使用set去重 一、核心操作 如果count為0了,則證明正好減到了0,就可以收獲,…

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 拉取鏡…

LINUX 指令大全

Linux服務器上有許多常用的命令,可以幫助你管理文件、目錄、進程、網絡和系統配置等。以下是一些常用的Linux命令: 文件和目錄管理 ls:列出當前目錄中的文件和子目錄 bash lspwd:顯示當前工作目錄的路徑 bash pwdcd:切…

燃氣對我們生活的重要性體現在哪里?

燃氣在我們的生活中有 多方面的重要性 ,以下是燃氣對我們生活的重要性的詳細說明: 烹飪和熱水供應 : 燃氣是家庭烹飪的主要能源,能夠快速、高效地加熱食物,使家庭聚餐更加便捷和愉快。 燃氣熱水器能夠在短時間內提供…

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是單列集合的祖宗接口(不可直接創建…