在使用Selenium WebDriver進行自動化測試時,等待是一個重要的概念,因為它可以確保Web元素在執行任何操作之前是可用的。Selenium提供了幾種等待機制:
1. **顯式等待**(Explicit Wait): 顯式等待是指定某個條件,并且等待直到條件成立時才繼續執行。在Python中,可以使用`WebDriverWait`類配合`expected_conditions`來實現顯式等待。
~~~
pythonCopy codefrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("http://example.com")
# 等待直到元素可見
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "myElementId"))
)
# 現在可以與元素交互
element.click()
~~~
2. **隱式等待**(Implicit Wait): 隱式等待是設置一個時間,WebDriver在這個時間內會不斷地嘗試查找元素。如果在設置的時間內找到了元素,它將繼續執行;如果沒有找到,它將拋出一個`NoSuchElementException`。
~~~
pythonCopy codefrom selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 設置隱式等待為10秒
driver.get("http://example.com")
element = driver.find_element_by_id("myElementId")
element.click()
~~~
3. **無等待**(No Wait): 如果你確定頁面已經加載完成,并且元素已經存在于DOM中,你可以不使用等待直接進行元素操作。但這通常不推薦,因為它可能導致`ElementNotVisibleException`或`NoSuchElementException`。
~~~
pythonCopy codefrom selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://example.com")
element = driver.find_element_by_id("myElementId")
element.click()
~~~
4. **自定義等待**(Custom Wait): 有時候,你可能需要等待某個復雜的條件或多個條件。在這種情況下,你可以編寫自定義的等待邏輯。
~~~
pythonCopy codefrom selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://example.com")
# 自定義等待邏輯
while True:
try:
element = driver.find_element_by_id("myElementId")
if element.is_displayed():
break
except NoSuchElementException:
pass
time.sleep(1) # 等待1秒再次嘗試
element.click()
~~~
顯式等待是推薦的做法,因為它允許你為特定的元素指定等待條件,而隱式等待則是一個全局設置,可能會導致WebDriver不必要地等待。在實際應用中,應該根據具體情況選擇最合適的等待策略。
- 前言
- 1.入門篇
- Python介紹
- 安裝與使用
- Python開發利器之VS Code
- 模塊安裝
- 命令行
- 一次Python無法安裝模塊的問題探索與解決之旅
- 命令運行
- Conda
- 下載地址
- 2.基礎篇
- 基礎語法
- 輸入與輸出
- with as的用法
- 注釋
- Python命令行參數
- 編碼
- 變量類型
- 列表遍歷
- 運算符
- 表達式語句
- 條件
- 循環
- 日期和時間
- 函數
- 高級語法
- @符號-裝飾器
- 模塊和包
- name
- init.py
- 錯誤和異常
- 面向對象
- 3.專題篇
- 常用功能
- Python 字符串連接
- python web
- Python CGI編程
- Python OAuth2
- 認證 Flask-HTTPAuth
- 常用命令
- 內置函數
- dir()
- print(f)
- 標準模塊
- sys
- pickle-數據序列化
- os
- IO(輸入輸出)
- 鍵盤輸入
- 文件讀寫
- 測試
- Python測試框架之pytest快速入門
- pytest-bdd快速示例和問題解決
- 基于pytest-bdd的項目目錄結構和命名規范
- python BDD 的相關概念
- Behave介紹和快速示例
- Python BDD之Behave測試報告
- Python BDD 框架比較之 pytest-bdd vs behave
- pytest進階
- Flask + pytest測試
- 參考網址
- pytest-bdd進階
- hehave進階
- 測試路徑
- python + selunium
- HTML 根據多層CSS 查找元素
- 等待執行
- 使用text 查找 span
- pytest如何在控制臺輸出
- 4.問題篇
- pip pip3 及區別
- TypeError: can only concatenate str (not "NoneType") to str
- 5.實戰篇
- matplotlib-繪圖包
- 導入類
- 命名規范
- 模塊查找
- 6.進階篇
- Flask
- Flask介紹
- Flask擴展模塊
- Flask-Login
- 問題
- Jinja2
- Flask-RESTful
- Flask-JWT-Extended
- WSGI
- Flask-SQLAlchemy
- 部署
- Flask VS Django
- Flask Web
- Flask + Vue
- Flask實戰
- Flask 標準目錄結構
- Blueprints
- 參考
- FastAPI 測試
- https 證書 Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate