零基礎入門Selenium自動化測試:自動登錄edu郵箱

🌟 Selenium簡單概述一下

Selenium 是一個開源的自動化測試工具,主要用于 Web 應用程序的功能測試。它能夠模擬用戶操作瀏覽器的行為(如點擊按鈕、填寫表單、導航頁面等),應用于前端開發、測試和運維領域。

特點

  1. 跨瀏覽器支持:兼容 Chrome、Firefox、Edge 等主流瀏覽器。
  2. 多語言支持:支持 Python、Java、JavaScript 等編程語言。
  3. 開源免費
  4. 強大的擴展性:結合測試框架(如 unittestpytest)和報告工具(如 Allure),可構建完整的自動化測試體系。

🛠? 環境搭建

1. 安裝 Python

Selenium 依賴 Python 環境。如果尚未安裝,請訪問 Python官網 下載并安裝最新版本(推薦 Python 3.8+)。

2. 安裝 Selenium 庫

打開終端(或命令提示符),輸入以下命令:

pip install selenium

3. 下載瀏覽器驅動

Selenium 需要通過 瀏覽器驅動 與瀏覽器交互。以下是常見瀏覽器的驅動下載地址:

  • Chrome 驅動:ChromeDriver
  • Firefox 驅動:GeckoDriver

?? 注意:驅動版本需與瀏覽器版本匹配!例如,Chrome 123 需要 ChromeDriver 123.x。

將下載的驅動文件(如 chromedriver.exe)放入系統環境變量路徑(如 C:\Windows/usr/local/bin),或直接放在腳本所在目錄。


🧰 Selenium 幾個核心功能

1. 啟動瀏覽器與訪問網頁

from selenium import webdriver
from selenium.webdriver.chrome.service import Serviceservice = Service(executable_path='chromedriver.exe')
driver = webdriver.Chrome(service=service)driver.get("https://www.baidu.com")

2. 元素定位與操作

Selenium 提供多種元素定位方式:

定位方式示例代碼
IDdriver.find_element(By.ID, "kw")
XPathdriver.find_element(By.XPATH, "//input[@id='kw']")
CSS 選擇器driver.find_element(By.CSS_SELECTOR, "input#kw")
鏈接文本driver.find_element(By.LINK_TEXT, "新聞")

3. 常用操作方法

# 輸入文本
element.send_keys("Hello Selenium")# 點擊按鈕
element.click()# 清除輸入框內容
element.clear()# 獲取文本內容
text = element.text

4. 顯式等待與隱式等待

隱式等待(全局生效):

driver.implicitly_wait(10) 

顯式等待(針對特定條件):

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "kw"))
)

5. 處理彈窗與文件上傳

  • 彈窗處理

    driver.switch_to.alert.accept()  # 確認彈窗
    driver.switch_to.alert.dismiss()  # 取消彈窗
    
  • 文件上傳

    driver.find_element(By.ID, "upload").send_keys("C:/path/to/file.txt")
    

🚀 測試框架與報告生成

關于 HtmlTestRunner 的具體用法請自行檢索一下…

1. 使用 unittest 編寫測試用例

import unittest
from selenium import webdriverclass TestBaiduSearch(unittest.TestCase):def setUp(self):self.driver = webdriver.Chrome()self.driver.get("https://www.baidu.com")def test_search(self):search_box = self.driver.find_element(By.ID, "kw")search_box.send_keys("Selenium")search_box.submit()self.assertIn("Selenium", self.driver.title)def tearDown(self):self.driver.quit()if __name__ == "__main__":unittest.main()

2. 生成 HTML 測試報告

使用 HTMLTestRunner 擴展生成可視化報告:

import unittest
import HtmlTestRunnerclass TestBaiduSearch(unittest.TestCase):# ...if __name__ == "__main__":unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='reports'))

運行后會在 reports 目錄生成 HTML 報告,可查看測試結果詳情。


🎯 實戰項目:自動登錄edu郵箱

用GPT加了注釋,方便修改。

from selenium import webdriver  # 導入webdriver模塊,用于瀏覽器自動化操作
from selenium.webdriver.common.by import By  # 導入By類,用于定位元素
from selenium.webdriver.support.ui import WebDriverWait  # 導入WebDriverWait類,用于等待頁面加載
from selenium.webdriver.support import expected_conditions as EC  # 導入expected_conditions模塊,用于設置等待條件# 創建一個新的Chrome瀏覽器實例
driver = webdriver.Chrome()try:# 訪問登錄頁面driver.get("http://mail.stu.ynu.edu.cn/")# 定位用戶名輸入框并輸入用戶名username_input = driver.find_element(By.XPATH, "//input[@name='qquin']")username_input.send_keys("Name")  # 用戶名# 定位密碼輸入框并輸入密碼password_input = driver.find_element(By.XPATH, "//input[@name='pp']")password_input.send_keys("Pwd")  # 密碼# remember_me_checkbox = driver.find_element(By.ID, "ss")# remember_me_checkbox.click()# 勾選“5天內自動登錄”復選框。# 經過測試,發現當鼠標停在復選框上時會有彈窗擋住登錄按鈕,# 因此使用js直接勾選remember_me_checkbox = driver.find_element(By.ID, "ss")driver.execute_script("arguments[0].checked = true;", remember_me_checkbox)# 定位登錄按鈕并點擊login_button = driver.find_element(By.XPATH, "//input[@type='submit']")login_button.click()try:# 使用顯式等待機制等待 div.topdata 元素出現(最長等待時間為5秒),# 該元素出現表示登錄成功。topdata_element = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.topdata")))print("登錄成功!")  # 登錄成功后打印消息except Exception as e:# 如果在指定時間內未找到 div.topdata 元素,則捕獲異常并打印錯誤信息print(f"登錄失敗: {e}")finally:# 不論登錄是否成功,在最后都會關閉瀏覽器窗口driver.quit()

📚 學習資源

  1. Selenium 官方文檔
  2. ChromeDriver 下載頁面

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

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

相關文章

day36 python神經網絡訓練

目錄 一、數據準備與預處理 二、數據集劃分與歸一化 三、構建神經網絡模型 四、定義損失函數和優化器 五、訓練模型 六、評估模型 在機器學習和深度學習的實踐中,信貸風險評估是一個非常重要的應用場景。通過構建神經網絡模型,我們可以對客戶的信用…

如何確定是不是一個bug?

在軟件測試過程中,我們經常會遇到一些異常現象,但并非所有異常都是Bug。如何準確判斷一個問題是否屬于Bug?本文將從Bug的定義、判定標準、常見誤區和實戰技巧四個方面展開,幫助測試工程師提高Bug判定的準確性。 1. Bug的定義:什么情況下算Bug? 一個Bug(缺陷)通常指軟件…

Lombok與Jackson實現高效JSON序列化與反序列化

引言 在Java開發中,處理JSON數據是常見需求,而Jackson作為廣泛使用的JSON庫,能夠高效地將Java對象與JSON互相轉換。然而,傳統的POJO(Plain Old Java Object)需要手動編寫大量樣板代碼(如getter…

論文閱讀:PURPLE: Making a Large Language Model a Better SQL Writer

論文地址:PURPLE: Making a Large Language Model a Better SQL Writer 摘要 大語言模型(LLM)技術在自然語言到 SQL(NL2SQL)翻譯中扮演著越來越重要的角色。通過大量語料訓練的 LLM 具有強大的自然語言理解能力和基本…

【圖像大模型】ControlNet:深度條件控制的生成模型架構解析

ControlNet:深度條件控制的生成模型架構解析 一、核心原理與技術突破1.1 基礎架構設計1.2 零卷積初始化1.3 多條件控制機制 二、系統架構與實現細節2.1 完整處理流程2.2 性能指標對比 三、實戰部署指南3.1 環境配置3.2 基礎推理代碼3.3 高級控制參數 四、典型問題解…

【從0到1搞懂大模型】chatGPT 中的對齊優化(RLHF)講解與實戰(9)

GPT系列模型的演進 chatgpt系列模型演進的重要節點包含下面幾個模型(當然,這兩年模型發展太快了,4o這些推理模型我就先不寫了) (Transformer) → GPT-1 → GPT-2 → GPT-3 → InstructGPT/ChatGPT(GPT-3.5) → GPT-4 下面介紹一…

2025年AEI SCI1區TOP,改進麻雀搜索算法MSSA+建筑三維重建,深度解析+性能實測

目錄 1.摘要2.麻雀搜索算法SSA原理3.整體框架4.改進SSA算法5.結果展示6.參考文獻7.代碼獲取8.讀者交流 1.摘要 對現有建筑進行高質量的三維重建對于其維護、修復和管理至關重要。圖像采集中的有效視角規劃會顯著影響基于攝影測量的三維重建質量。復雜的建筑結構常常導致傳統視…

鴻蒙開發:如何實現列表吸頂

前言 本文基于Api13 列表吸頂功能,在實際的開發中有著很大的作用,比如可以讓列表層級之間更加分明,減少一定程度上的視覺混亂,由于吸頂的標題會隨著滾動固定在頂部,可以讓用戶無需反復滑動回頂部確認分組位置&#xff…

使用Zotero的RSS訂閱功能快速了解感興趣領域最新文章

文章目錄 寫在前面中文期刊的RSS訂閱英文期刊的RSS訂閱回到Zotero有啥用? 寫在前面 作為一名研究生或者科研工作者,肯定需要經常檢索自己研究領域的最新文獻,相比于不定期的去各大數據庫檢索文獻,借助RSS訂閱功能則更加便捷。 R…

Windows安裝Docker Desktop開啟 Kubenetes制作并部署本地鏡像

1、安裝Docker Desktop docker desktop官方下載鏈接,下載后一路點下來安裝就好了。 2、制作本地鏡像 跟著docker步驟制作鏡像,需要先配置docker 鏡像源,因為網絡問題 {"builder": {"gc": {"defaultKeepStorage&…

嵌入式學習筆記 - freeRTOS 列表,鏈表,節點跟任務之間關系

一 下圖說明了 freeRTOS 就緒列表,鏈表,節點跟任務之間關系 一個任務對應一個節點,一個鏈表對應一個優先級,一個任務根據優先級可以插入任何一個鏈表中。 插入函數為,這也是freeRTOS的核心函數,對每個任務…

scikit-learn pytorch transformers 區別與聯系

以下是 scikit-learn、PyTorch 和 Transformers 的區別與聯系的表格形式展示: 特性/庫scikit-learnPyTorchTransformers主要用途傳統機器學習算法深度學習框架預訓練語言模型與自然語言處理任務核心功能分類、回歸、聚類、降維、模型選擇等張量計算、自動微分、神經網絡構建與…

【C/C++】從零開始掌握Kafka

文章目錄 從零開始掌握Kafka一、Kafka 基礎知識理解(理論)1. 核心組件與架構2. 重點概念解析 二、Kafka 面試重點知識梳理三、C 使用 Kafka 的實踐(librdkafka)1. librdkafka 簡介2. 安裝 librdkafka 四、實戰:高吞吐生…

Spyglass:目標文件(.spq)的結構

相關閱讀 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 預備知識 為了方便檢查,Spyglass向用戶提供Guideware作為檢查參考;Guideware又包含各種方法(Methodology),應用于設計的不同階段&…

一些Dify聊天系統組件流程圖架構圖

分享一些有助于深入理解Dify聊天模塊的架構圖 整體組件架構圖 #mermaid-svg-0e2XalGLqrRbH1Jy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0e2XalGLqrRbH1Jy .error-icon{fill:#552222;}#mermaid-svg-0e2XalGLq…

地理空間索引:解鎖日志分析中的位置智慧

title: 地理空間索引:解鎖日志分析中的位置智慧 date: 2025/05/24 18:43:06 updated: 2025/05/24 18:43:06 author: cmdragon excerpt: 地理空間索引在日志分析中應用廣泛,涉及用戶登錄IP定位、移動端位置軌跡和物聯網設備位置上報等場景。MongoDB支持2dsphere和2d兩種地理…

分庫分表深度解析

一、為什么要分庫分表? 通常,數據庫性能受到如下幾個限制: 硬件瓶頸:單機的 CPU、內存、磁盤 I/O 等資源總是有限。例如,當單表中的記錄達到上億、甚至更高時,表掃描、索引維護和數據遷移會變得非常慢。單…

QListWidget的函數,信號介紹

前言 Qt版本:6.8.0 該類用于列表模型/視圖 QListWidgetItem函數介紹 作用 QListWidget是Qt框架中用于管理可交互列表項的核心組件,主要作用包括: 列表項管理 支持動態添加/刪除項:addItem(), takeItem()批量操作:addItems()…

ModbusRTU轉profibusDP網關與RAC400通訊報文解析

ModbusRTU轉profibusDP網關與RAC400通訊報文解析 在工業自動化領域,ModbusRTU和ProfibusDP是兩種常見的通信協議。ModbusRTU以其簡單、可靠、易于實現等特點,廣泛應用于各種工業設備之間的通信;而ProfibusDP則是一種高性能的現場總線標準&am…

Python容器

一、容器 1. 列表【】:有序可重復可混裝可修改 [元素1,元素2,元素3,...] ? 可以容納多個元素 ? 可以容納不同類型的元素(混裝) ? 數據是有序存儲的(有下標序號) ? 允許重復數…