🌟 Selenium簡單概述一下
Selenium 是一個開源的自動化測試工具,主要用于 Web 應用程序的功能測試。它能夠模擬用戶操作瀏覽器的行為(如點擊按鈕、填寫表單、導航頁面等),應用于前端開發、測試和運維領域。
特點
- 跨瀏覽器支持:兼容 Chrome、Firefox、Edge 等主流瀏覽器。
- 多語言支持:支持 Python、Java、JavaScript 等編程語言。
- 開源免費。
- 強大的擴展性:結合測試框架(如
unittest
、pytest
)和報告工具(如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 提供多種元素定位方式:
定位方式 | 示例代碼 |
---|---|
ID | driver.find_element(By.ID, "kw") |
XPath | driver.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()
📚 學習資源
- Selenium 官方文檔
- ChromeDriver 下載頁面