顯示等待和隱式等待的區別

在Selenium自動化測試中,等待元素載入是非常重要的一個環節。為了更好的控制頁面元素的等待時間,Selenium提供了兩種等待方式:顯示等待和隱式等待。本文將從多個方面分析顯示等待和隱式等待的區別。

一、顯示等待 vs. 隱式等待

顯示等待和隱式等待是Selenium中兩種控制等待時間的方式。其中,顯示等待是針對某一個具體元素的等待操作,而隱式等待則是對整個頁面的等待操作。

二、代碼示例1:顯示等待


# 導入必要的模塊
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# 設置等待時間
wait = WebDriverWait(driver, 10)

# 使用顯式等待等待元素載入完成
element = wait.until(EC.presence_of_element_located((By.ID,'element_id')))

上述代碼的意思是在10秒內,等待id=’element_id’的元素出現,如果10秒鐘後還沒有出現,則會拋出異常TimeoutException。

三、代碼示例2:隱式等待


# 導入必要的模塊
from selenium import webdriver

# 設置等待時間
driver.implicitly_wait(10)

# 訪問網頁
driver.get('https://www.example.com')

# 查找元素
element = driver.find_element_by_id('element_id')

上述代碼的意思是在整個頁面中等待10秒鐘,如果10秒鐘內還沒有把需要的元素渲染出來,則會拋出異常NoSuchElementException。

四、等待時間的控制

顯示等待和隱式等待的一個明顯的區別就是等待時間的控制方式不同,一個是通過等待元素的出現與否,一個是通過等待整個頁面的載入。

另外,隱式等待是默認存在的,如果我們不手動設置,就會默認等待0秒鐘。而顯示等待需要通過代碼來進行手動設置等待時間。

五、不同的預期條件

隱式等待設置等待時間後會在整個頁面中進行監測,如果10秒鐘內沒有載入完畢,則會返回NoSuchElement錯誤。

相較而言,顯示等待根據不同的預期條件來進行判斷等待是否完成。可以選擇不同的判斷條件,比如判斷元素是否出現,或者判斷元素是否可見等。這也是顯示等待和隱式等待的一個明顯的區別。

六、代碼示例3:不同的預期條件


# 導入必要的模塊
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# 等待元素出現
element = wait.until(EC.presence_of_element_located((By.ID,'element_id')))

# 等待元素可見
element = wait.until(EC.visibility_of_element_located((By.ID,'element_id')))

上面的示例代碼中,使用ExpectedConditions類來判斷元素是否出現或者是否可見,具體使用哪種判斷條件可以根據實際需求調整。

七、總結

在Selenium自動化測試中,等待元素的載入是非常重要且必不可少的一個環節。通過本文的分析,我們可以看到顯示等待和隱式等待的區別,以及它們各自的優劣勢,並且了解了預期條件的不同。

對於一些需要控制某個元素等待時間的場景,我們可能需要使用到顯示等待來實現,而對於整個頁面進行等待的場景,則可以考慮使用隱式等待。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232265.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 12:50
下一篇 2024-12-11 12:50

相關推薦

  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • Sublime Test與Python的區別

    Sublime Text是一款流行的文本編輯器,而Python是一種廣泛使用的編程語言。雖然Sublime Text可以用於編寫Python代碼,但它們之間有很多不同之處。接下來從…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字元命令行的語言…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟體開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • TensorFlow和Python的區別

    TensorFlow和Python是現如今最受歡迎的機器學習平台和編程語言。雖然兩者都處於機器學習領域的主流陣營,但它們有很多區別。本文將從多個方面對TensorFlow和Pyth…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • 麥語言與Python的區別

    麥語言和Python都是非常受歡迎的編程語言。它們各自有自己的優缺點和適合的應用場景。本文將從語言特性、語法、生態系統等多個方面,對麥語言和Python進行詳細比較和闡述。 一、語…

    編程 2025-04-28
  • Python與C語言的區別和聯繫

    Python與C語言是兩種常用的編程語言,雖然兩者都可以用於編寫軟體程序,但是它們之間有很多不同之處。本文將從多個方面對Python與C語言的區別和聯繫進行詳細的闡述。 一、語法特…

    編程 2025-04-28
  • Python中深拷貝和淺拷貝的區別

    本文將從以下幾個方面對Python中深拷貝和淺拷貝的區別做詳細的闡述,包括:拷貝的含義、變數和對象的區別、淺拷貝的示例、深拷貝的示例、可變對象和不可變對象的區別、嵌套的數據結構以及…

    編程 2025-04-28

發表回復

登錄後才能評論