selenium之文件下載

Selenium 自動化測試:輕松搞定文件下載

在 Web 自動化測試中,經常會遇到需要驗證文件下載功能的場景。例如,測試報告的導出、用戶上傳文件的下載、PDF 文檔的生成與下載等等。Selenium 本身并沒有直接處理文件下載的內置方法,但我們可以通過一些巧妙的配置和技巧來輕松實現文件下載的自動化測試。

本文將深入探討在使用 Selenium 進行自動化測試時,如何處理文件下載,讓你能夠有效地驗證 Web 應用程序的文件下載功能。

為什么 Selenium 本身不直接處理文件下載?

Selenium 的主要職責是驅動瀏覽器進行交互,模擬用戶的行為。而文件的下載通常是由瀏覽器自身處理的,涉及到操作系統的文件系統。Selenium 無法直接干預瀏覽器底層的下載過程和文件保存行為。

處理文件下載的常見策略

雖然 Selenium 本身不直接處理,但我們可以通過配置瀏覽器行為或借助其他工具來間接實現文件下載的自動化測試。

配置瀏覽器設置,實現自動下載到指定目錄

這是最常用且推薦的方法。通過修改瀏覽器的配置,我們可以指示瀏覽器在下載文件時,自動保存到我們預先指定的目錄,而無需彈出“另存為”對話框。

可以看到,執行下面代碼的時候;當前的目錄會創建一個downloads文件夾;并且里面存放下載的文件

import time, os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Serviceclass browser_download:def __init__(self, path, options):self.path = pathself.service = Service(path)self.options = optionsself.driver = webdriver.Chrome(service=self.service, options=self.options)def get(self, url):self.driver.get(url)self.driver.implicitly_wait(5)def download_file(self):xpath = f'//*[@id="content"]/div/a[13]'self.driver.find_element(By.XPATH, xpath).click()def close(self):time.sleep(5)self.driver.quit()if __name__ == '__main__':serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'url = "https://the-internet.herokuapp.com/download"options = Options()# 設置下載路徑download_dir = os.path.abspath("downloads")  # 指定下載目錄perfs = {"download.default_directory": download_dir,}options.add_experimental_option("prefs", perfs)browser = browser_download(serve_path, options)browser.get(url)browser.download_file()browser.close()

自動化測試中文件下載的驗證

一旦文件被下載到指定的目錄,下一步就是驗證下載是否成功以及文件的內容是否符合預期。常見的驗證方法包括:

  • 檢查文件是否存在: 使用 os.path.exists() 方法判斷文件是否已成功下載到指定目錄。
  • 檢查文件大小: 使用 os.path.getsize() 方法獲取文件大小,并與預期大小進行比較。
  • 檢查文件類型: 使用 os.path.splitext() 獲取文件擴展名,判斷文件類型是否正確。
  • 讀取文件內容并進行斷言:
    • 對于文本文件(如 CSV、TXT),可以使用 Python 的文件操作讀取內容并進行斷言。
    • 對于 JSON 文件,可以使用 json 庫解析并進行斷言。
    • 對于 PDF 文件,可以使用第三方庫(如 PyPDF2)讀取文本內容或元數據進行斷言。
    • 對于其他二進制文件,可能需要根據文件格式進行特定的解析和驗證。

最佳實踐和注意事項

  • 指定穩定的下載目錄: 確保下載目錄在測試執行過程中是可寫且不會被清理的。可以使用絕對路徑,方便管理。
  • 處理不同文件類型: 針對不同的文件類型,配置瀏覽器以正確處理,并在驗證時使用相應的庫進行解析。
  • 等待文件下載完成: 在觸發下載后,需要等待一段時間才能進行文件驗證。可以使用顯式等待,例如輪詢檢查文件是否存在或文件大小是否穩定。
  • 清理下載目錄: 在每個測試用例執行前后,清理下載目錄,避免相互影響。
  • 考慮并發測試: 如果需要進行并發測試,確保每個測試用例使用獨立的下載目錄,避免文件沖突。
  • 處理下載失敗的情況: 考慮網絡問題、服務器錯誤等可能導致下載失敗的情況,并在測試中進行適當的處理和斷言。

總結

雖然 Selenium 本身不直接處理文件下載,但通過配置瀏覽器設置,我們可以實現將下載文件自動保存到指定目錄,從而方便我們進行后續的驗證。結合 Python 的文件操作和相關的第三方庫,我們可以編寫出可靠的自動化測試用例,有效地驗證 Web 應用程序的文件下載功能。掌握這些技巧,將使你的自動化測試能力更上一層樓!

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

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

相關文章

基于遷移學習實現肺炎X光片診斷分類

大家好,我是帶我去滑雪! 肺炎是全球范圍內致死率較高的疾病之一,尤其是在老年人、免疫系統較弱的患者群體中,更容易引發嚴重并發癥。傳統上,肺炎的診斷依賴于醫生的臨床經驗以及影像學檢查,尤其是X光片&…

工業數據治理范式革新:時序數據庫 TDengine虛擬表技術解析

小T導讀:在工業數字化過程中,數據如何從設備采集順利“爬坡”到上層應用,一直是個難題。傳統“單列模型”雖貼合設備協議,卻讓上層分析舉步維艱。TDengine 用一種更聰明的方法打通了這條數據通路:不強求建模、不手動轉…

Redis面試——日志

一、RDB(Redis DataBase) RDB 全程是 Redis DataBase,它是一種將 Redis 在某一時刻內存中的數據以快照形式保存到磁盤的機制 ,相當于給執行save/bgsave命令時刻的內存數據庫數據拍了一張快照我們如果通過save命令來執行快照&…

【Android】常用參數實踐 用戶界面UI 布局文件XML

本文將系統總結 Android XML 布局的通用參數和常用布局類型的專屬規則 一、通用布局參數 這些參數適用于所有 View 和 ViewGroup,是布局設計的基石。 1. 尺寸控制 android:layout_width 與 android:layout_height 定義視圖的寬度和高度,可選值&#xf…

解決 VSCode 中 NVM 配置后無法識別 Node 和 NPM 的問題

在開發中,我們經常需要使用 Node.js 和 NPM 來管理 JavaScript 項目依賴,而 NVM(Node Version Manager)是開發者在本地環境中管理多個 Node.js 版本的得力工具。不過,有時候在 VSCode 中配置完 NVM 后,可能…

BGP分解實驗·23——BGP選路原則之路由器標識

在選路原則需要用到Router-ID做選路決策時,其對等體Router-ID較小的路由將被優選;其中,當路由被反射時,包含起源器ID屬性時,該屬性將代替router-id做比較。 實驗拓撲如下: 實驗通過調整路由器R1和R2的rout…

Linux: 線程同步

目錄 一 前言 二 線程饑餓 三 線程同步 四 條件變量 1. cond ( condition) 2. pthread_cond_wait() : 3. pthread_cond_signal() 五 條件變量的使用 一 前言 在上篇文章Linux : 多線程互斥-CSDN博客我們講解了線程互斥的概念&#xff…

MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句

在 MyBatis-Plus 中,QueryWrapper 的 exists 方法用于拼接 SQL 中的 EXISTS 子句,通常用于構 建子查詢條件。以下是具體用法和示例: ??1. 基本語法?? // 判斷是否存在符合條件的記錄 queryWrapper.exists(String existsSql); queryWrapper.notExists(String existsSq…

[數據結構]哈希表

目錄 1、哈希表 1.1、概念 1.2、沖突 2、哈希函數設計 3、負載因子調節 4、閉散列 5、開散列/哈希桶(重點掌握) 6、實現哈希桶 6.1、put方法 6.2、HashMap的擴容機制 6.3、get方法 7、HashMap 8、HashSet 8.1、哈希表性能分析 9、hashcod…

VS-Code創建Vue3項目

1 創建工程文件 創建一個做工程項目的文件夾 如:h5vue 2 cmd 進入文件 h5vue 3 輸入如下命令 npm create vuelatest 也可以輸入 npm create vitelatest 4 輸入項目名稱 項目名稱:自已輸入 回車 可以按鍵盤 a (全選) 回車: Playwright…

linux休眠喚醒流程

1、框架 2、休眠流程 應用層通過echo mem > /sys/power/state寫入休眠狀態,給一張大概流程圖 這個操作對應在kernel/power/main.c的state這個attr的store操作 static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, …

Mysql--基礎知識點--93--兩階段提交

1 兩階段提交 以update語句的具體執行過程為例: 具體更新一條記錄 UPDATE t_user SET name ‘xiaolin’ WHERE id 1;的流程如下: 1.執行器負責具體執行,會調用存儲引擎的接口,通過主鍵索引樹搜索獲取 id 1 這一行記錄&#…

Windows 環境下 Apache 配置 WebSocket 支持

目錄 前言1. 基本知識2. 實戰前言 ?? 找工作,來萬碼優才:?? #小程序://萬碼優才/r6rqmzDaXpYkJZF 爬蟲神器,無代碼爬取,就來:bright.cn 原先寫過apache的http配置:Apache httpd-vhosts.conf 配置詳解(附Demo) 1. 基本知識 ?? WebSocket 是 HTTP 的升級協議 客戶…

UMAEA論文閱讀

Preliminaries MMKG為一個五元組G{E, R, A, V, T},其中E、R、A和V分別表示實體集、關系集、屬性集和圖像集。 T?ERE是關系三元組集。 給定兩個MMKG G1 {E1, R1, A1, V1, T1} 和 G2 {E2, R2, A2, V2, T2}, MMEA旨在識別每個實體對(e1…

AIGC-十款知識付費類智能體完整指令直接用(DeepSeek,豆包,千問,Kimi,GPT)

Unity3D特效百例案例項目實戰源碼Android-Unity實戰問題匯總游戲腳本-輔助自動化Android控件全解手冊再戰Android系列Scratch編程案例軟考全系列Unity3D學習專欄藍橋系列AIGC(GPT、DeepSeek、豆包、千問、Kimi)??關于作者 專注于Android/Unity和各種游戲開發技巧,以及各種資…

Qt界面卡住變慢的解決方法

本質原因: 當Qt界面出現卡頓或無響應時,通常是因為主線程(GUI線程)被耗時操作阻塞。 完全忘了。。。 Qt Creater解決方法 1. 定位耗時操作 目標:找到阻塞主線程的代碼段。 方法: 使用QElapsedTimer測量代碼執行時間…

【LangChain4j快速入門】5分鐘用Java玩轉GPT-4o-mini,Spring Boot整合實戰!| 附源碼

【LangChain4j快速入門】5分鐘用Java玩轉GPT-4o-mini,Spring Boot整合實戰! 前言:當Java遇上大模型 在AI浪潮席卷全球的今天,Java開發者如何快速擁抱大語言模型?LangChain4j作為專為Java打造的AI開發框架&#xff0c…

Vue 3 reactive 和 ref 區別及 失去響應性問題

在 Vue 3 中,reactive 和 ref 是實現響應式數據的兩個核心 API,它們的設計目標和使用場景有所不同。以下是兩者的詳細對比: 1. 基本定義與核心功能 特性reactiveref作用創建對象類型的響應式代理(對象、數組、Map 等&#xff09…

第一節:Vben Admin 最新 v5.0初體驗

系列文章目錄 基礎篇 第一節:Vben Admin介紹和初次運行 第二節:Vben Admin 登錄邏輯梳理和對接后端準備 第三節:Vben Admin登錄對接后端login接口 第四節:Vben Admin登錄對接后端getUserInfo接口 第五節:Vben Admin權…

Nginx部署spa單頁面的小bug

沒部署過,都是給后端干的,自己嘗試部署了一個下午終于成功了 我遇到的最大的bug是進入后只有首頁正常顯示 其他頁面全是404,于是問問問才知道,需要這個 location / { try_files $uri $uri/ /index.html; } 讓…