Selenium Web UI自動化測試:從入門到實戰

引言

在當今快速迭代的軟件開發周期中,自動化測試已成為保障產品質量、提升測試效率的核心手段之一。而針對Web應用的UI自動化測試,Selenium作為最流行的開源工具之一,憑借其跨瀏覽器、多語言支持(Python、Java、C#等)和強大的社區生態,成為測試工程師和開發者的首選。本文將詳細介紹Selenium的核心功能、環境搭建、實戰技巧及最佳實踐,助你快速掌握Web UI自動化測試的核心技能。


一、Selenium簡介與環境搭建
1. Selenium的組成
  • Selenium WebDriver:核心組件,通過瀏覽器驅動直接操作瀏覽器,模擬用戶行為。

  • Selenium Grid:支持分布式測試,在多臺機器上并行運行測試用例。

  • Selenium IDE:瀏覽器插件,支持錄制和回放測試腳本(適合快速原型設計)。

2. 環境搭建(以Python為例)
  1. 安裝Python
    訪問Python官網下載并安裝Python,配置環境變量。

  2. 安裝Selenium庫

    bash

    復制

    pip install selenium
  3. 下載瀏覽器驅動

    • Chrome:下載ChromeDriver,版本需與本地Chrome瀏覽器匹配。

    • 將驅動文件路徑添加到系統環境變量,或直接在代碼中指定路徑。

  4. 驗證環境

    python

    復制

    from selenium import webdriverdriver = webdriver.Chrome()  # 若驅動在環境變量中,無需指定路徑
    driver.get("https://www.baidu.com")
    print(driver.title)
    driver.quit()

二、Selenium核心操作
1. 元素定位

Selenium提供8種元素定位方式,常用方法如下:

  • ID定位find_element(By.ID, "id_value")

  • XPath定位find_element(By.XPATH, "//div[@class='example']")

  • CSS選擇器find_element(By.CSS_SELECTOR, ".class_name")

python

復制

from selenium.webdriver.common.by import Bysearch_input = driver.find_element(By.ID, "kw")
search_button = driver.find_element(By.XPATH, "//input[@id='su']")
2. 常用操作
  • 輸入文本element.send_keys("text")

  • 點擊元素element.click()

  • 獲取文本element.text

  • 頁面導航driver.get(url)driver.back()driver.forward()

3. 等待機制
  • 隱式等待:全局等待,設置一次即可。

    python

    復制

    driver.implicitly_wait(10)  # 最多等待10秒
  • 顯式等待:針對特定條件靈活等待。

    python

    復制

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "target_element"))
    )

三、實戰案例:電商網站自動化測試
案例1:用戶登錄

python

復制

def test_login():driver.get("https://example.com/login")driver.find_element(By.ID, "username").send_keys("test_user")driver.find_element(By.ID, "password").send_keys("password123")driver.find_element(By.CSS_SELECTOR, ".login-btn").click()assert "Welcome" in driver.page_source
案例2:購物車操作

python

復制

def test_add_to_cart():driver.get("https://example.com/product/123")driver.find_element(By.XPATH, "//button[text()='Add to Cart']").click()WebDriverWait(driver, 10).until(EC.alert_is_present())alert = driver.switch_to.alertassert "added" in alert.textalert.accept()

四、高級技巧與最佳實踐
1. 處理復雜場景
  • iframe切換

    python

    復制

    driver.switch_to.frame("iframe_id")
    # 操作iframe內元素
    driver.switch_to.default_content()  # 切回主文檔
  • 文件上傳

    python

    復制

    driver.find_element(By.ID, "file_input").send_keys("/path/to/file.txt")
2. 使用Page Object模式

Page Object Model (POM)?將頁面元素和操作封裝成類,提升代碼復用性和可維護性。

python

復制

class LoginPage:def __init__(self, driver):self.driver = driverself.username = (By.ID, "username")self.password = (By.ID, "password")self.login_btn = (By.CSS_SELECTOR, ".login-btn")def login(self, user, pwd):self.driver.find_element(*self.username).send_keys(user)self.driver.find_element(*self.password).send_keys(pwd)self.driver.find_element(*self.login_btn).click()
3. 集成測試框架

結合pytestunittest管理測試用例,生成報告:

python

復制

import pytest@pytest.fixture
def browser():driver = webdriver.Chrome()yield driverdriver.quit()def test_homepage(browser):browser.get("https://example.com")assert "Home" in browser.title
4. 持續集成(CI)

通過Jenkins、GitHub Actions等工具實現自動化測試流水線:

yaml

復制

# GitHub Actions 示例
jobs:test:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Run Selenium Testsrun: |pip install -r requirements.txtpytest tests/

五、常見問題與優化
  1. 元素定位失敗

    • 檢查元素是否在iframe或Shadow DOM中。

    • 使用相對XPath或CSS選擇器避免依賴絕對路徑。

  2. 跨瀏覽器兼容性

    • 使用WebDriverManager自動管理瀏覽器驅動版本。

    • 在Selenium Grid中配置多瀏覽器測試。

  3. 提升執行速度

    • 減少不必要的等待時間,優先使用顯式等待。

    • 啟用瀏覽器無頭模式(Headless):

      python

      復制

      options = webdriver.ChromeOptions()
      options.add_argument("--headless")
      driver = webdriver.Chrome(options=options)

六、總結

Selenium作為Web UI自動化測試的標桿工具,其靈活性和擴展性使其成為測試領域的“瑞士軍刀”。通過本文的學習,讀者可掌握從環境搭建到復雜場景處理的完整流程,并結合最佳實踐構建高效、穩定的自動化測試體系。未來可進一步探索:

  • 移動端測試:Appium框架。

  • 云測試平臺:BrowserStack、Sauce Labs。

  • AI驅動的測試:應用機器學習優化元素定位與異常檢測。


相關資源

  • Selenium官方文檔

  • Pytest官方教程

  • Page Object模式詳解


版權聲明
本文遵循CC 4.0 BY-SA版權協議,轉載請注明出處!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74196.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74196.shtml

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

相關文章

Java 大視界 -- Java 大數據中的數據隱私保護技術在多方數據協作中的應用(147)

💖親愛的朋友們,熱烈歡迎來到 青云交的博客!能與諸位在此相逢,我倍感榮幸。在這飛速更迭的時代,我們都渴望一方心靈凈土,而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識,也…

編程考古-安德斯·海爾斯伯格(Anders Hejlsberg)回答離開Borland的原因

安德斯海爾斯伯格(Anders Hejlsberg)是著名的編程語言和工具開發者,曾主導開發了 Turbo Pascal、Delphi(Borland 時期),以及加入微軟后參與的 C# 和 TypeScript。關于他離開 Borland 的原因,可以…

西門子仿真實例位置

C:\Users\san\Documents\Siemens\Simatic\Simulation\Runtime\Persistence S7-PLCSIM Advanced V3.0 可以打開文件,刪除重建

【數據庫系統原理】Ch7 數據庫應用設計與開發實例

目錄 大綱7.1 需求描述與分析7.2 系統設計7.3 系統實現7.4 系統測試與維護 習題真題2024-102024-042023-102023-042022-10 大綱 7.1 需求描述與分析 熟悉需求描述與分析的方法,達到"領會"層次。 7.2 系統設計 熟悉根據需求的描述劃分系統的功能模塊,能夠進行初步…

使用 Python 的turtle庫繪制精美圖形

在 Python 編程的世界里,turtle庫是一個非常有趣且實用的工具,它為初學者和有經驗的開發者提供了一個簡單而直觀的方式來進行圖形繪制。本文將詳細講解如何使用turtle庫繪制不同的圖形,包括六邊形、一個特定的多邊形,以及一個由線…

基于linux平臺的C語言入門教程(5)基本數據類型

文章目錄 1. 什么是數據類型?2. C 語言的基本數據類型3. 數據類型的存儲大小4. 示例代碼代碼解析:輸出結果: 5. 常見問題問題 1:float 和 double 的區別是什么?問題 2:unsigned 類型可以存儲負數嗎&#xf…

Bellman_ford 算法——解決負權邊最短路徑問題

卡碼網:94. 城市間貨物運輸 I 94. 城市間貨物運輸 I 題目描述 某國為促進城市間經濟交流,決定對貨物運輸提供補貼。共有 n 個編號為 1 到 n 的城市,通過道路網絡連接,網絡中的道路僅允許從某個城市單向通行到另一個城市,不能反向通行。 網絡中的道路都有各自的運輸成本…

mysql——第二課

學生表 CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,sex varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,age int(11) DEFAULT NULL,c_id int(10) DEFAULT NULL,PRIMARY KEY (id),KEY c_id (c_id),CONSTR…

圖解 ThreadLocal

在 Java 多線程編程的世界里,ThreadLocal 是一個非常實用的工具,它為每個線程提供了獨立的變量副本,避免了多線程環境下的變量共享問題。今天,我們就從內存視角出發,通過一張圖來深入理解 ThreadLocal 的工作原理&…

Sql Server 索引性能優化 分析以及分表

定位需優化語句 根據工具 skywking 或者開啟慢查詢日志 找到 慢sql 的語句根據 執行過程 來 判斷 慢的原因 row filter 指標 看查了多少數據 比例多少 type 看下是單表 還是 join聯表 比如 執行步驟多 沒索引 優化方向 減少執行次數索引 沒索引考慮加索引 加索引 盡量選擇 i…

@JsonSerialize注解

1.簡介 JsonSerialize注解可以自定義改變返回前端的內容,比如:將Student實體類的age字段的值在返回前端之前,由20改為21. 要用到jackson-databind依賴包,在Spring Boot項目中,默認已經集成了Jackson,因此你不需要手動引入Jackson庫。 2.上例子 將Stud…

Java面試黃金寶典5

1. ConcurrentHashMap 和 HashTable 有哪些區別 原理 HashTable:它繼承自 Dictionary 類,是 Java 早期提供的線程安全哈希表。其線程安全的實現方式是對每個方法都使用 synchronized 關鍵字進行同步。例如,在調用 put、get 等方法時&#xff…

vim的一般操作(分屏操作) 和 Makefile 和 gdb

目錄 一. vim的基本概念 二. vim基礎操作 2.1 插入模式 aio 2.2 [插入模式]切換至[正常模式] Esc 2.3[正常模式]切換至[末行模式] shift ; 2.4 替換模式 Shift R 2.5 視圖(可視)模式 (可以快速 刪除//注釋 或者 增加//注釋) ctrl v 三&…

Linux:基礎IO---文件描述符

文章目錄 1. 前言1.1 C語言文件知識回顧 2. 文件2.1 文件基礎知識 3. 被打開的文件3.1 以C語言為主,先回憶一下C文件接口3.2 過渡到系統,認識文件系統調用3.3 訪問文件的本質3.4 重定向&&緩沖區 序:在深入了解了進程的內容后&#xf…

2025年十大AI工具對比

2025年十大AI工具對比 以下是2025年各大AI工具的詳細對比,涵蓋性能、功能、用戶評價等方面,并以表格形式呈現。數據來源于多個權威來源,確保信息全面且準確。 對比表格 排名AI工具名稱主要功能性能特點用戶評價適用場景1DeepSeek多模態AI、…

JDK 24 發布,新特性解讀!

一、版本演進與技術格局新動向 北京時間3月20日,Oracle正式發布Java SE 24。作為繼Java 21之后的第三個非LTS版本,其技術革新力度遠超預期——共集成24項JEP提案,相當于Java 22(12項)與Java 23(12項&#…

批量圖片壓縮工具,高效減小文件大小并保持質量

在處理大量圖片時,如何高效壓縮文件大小并保持畫質是個常見難題。今天為大家推薦一款專業工具——JPGC,它專為圖片批量處理設計,能快速壓縮JPG/JPEG格式圖片,在減小文件體積的同時盡可能保留畫質,尤其適合處理數碼相機…

【002安卓開發方案調研】之Kotlin+Jetpack開發方案

基于2025年國內移動開發領域的現狀,結合Jetpack Compose的技術特性和生態發展,以下是對KotlinJetpack Compose開發安卓應用的綜合分析: 一、技術與生態成熟度評估 1. 技術成熟度 聲明式UI與開發效率 Jetpack Compose采用聲明式編程模型&…

軟考中級-軟件設計師 準備

軟考中級-軟件設計師 準備 一、軟考相關1.1、考試時間1.2、考試時長1.3、題型和分值: 二、軟考備考2.1、相關書籍2.2、推薦課程:B站up主zst_20012.3、學習路線 一、軟考相關 1.1、考試時間 一年有兩次軟考,一般是五月末和十一月的中旬 以下…

【數據挖掘】Python基礎環境安裝配置

【數據挖掘】Python基礎環境安裝配置 一、摘要二、安裝Python3.13.2三、安裝Jupyter Notebook四、安裝Numpy和Pandas以及matplotlib五、安裝scikit-learn庫和seaborn庫 一、摘要 本文主要介紹如何在Windows上安裝Python3.13.2,然后基于該Python版本安裝Jupyter not…