【selenium】強制等待,隱式等待,顯式等待

神奇的洋子發表於2020-11-01

在實際使用selenium或者appium時,等待下個等待定位的元素出現,特別是web端載入的過程,都需要用到等待,而等待方式的設定是保證指令碼穩定有效執行的一個非常重要的手段,在selenium中(appium通用)常用的等待分為顯示等待WebDriverWait()、隱式等待implicitly_wait()、強制等待sleep()三種,下面我們就分別介紹一下這三種等待的區別

強制等待

sleep(): 強制等待,設定固定休眠時間。指令碼的執行過程中執行 sleep()後執行緒休眠。

隱式等待

implicitly_wait():隱式等待,是設定的全域性等待。設定等待時間,是對頁面中的所有元素設定載入時間,如果超出了設定時間的則丟擲異常。隱式等待可以理解成在規定的時間範圍內,瀏覽器在不停的重新整理頁面,直到找到相關元素或者時間結束。

# 導包-selenium
from selenium import webdriver
# 匯入時間包
from time import  sleep
# 例項化物件-火狐瀏覽器
driver=webdriver.Firefox()

# 呼叫隱式等待
driver.implicitly_wait(10)


url="E:\\雙元\\Web自動化\\02_其他資料\\註冊A.html"
# 開啟url
driver.get(url)

driver.find_element_by_css_selector("#userA").send_keys("admin")
driver.find_element_by_css_selector("#passwordA").send_keys("123456")

sleep(3)
# 關閉瀏覽器
driver.quit()

顯式等待

WebDriverWait():顯式等待,是針對於某個特定的元素設定的等待時間,在設定時間內,預設每隔一段時間檢測一次當前頁面某個元素是否存在,如果在規定的時間內找到了元素,則直接執行,即找到元素就執行相關操作,如果超過設定時間檢測不到則丟擲異常。預設檢測頻率為0.5s,預設丟擲異常為:NoSuchElementException

實現步驟

1. 導包 等待類         --> from selenium.webdriver.support.wait import WebDriverWait
2. 導包 判斷條件     --> from selenium.webdriver.support import expected_conditions as EC
                        (將expected_conditions 通過as關鍵字起個別名:EC)
3. WebDriverWait(driver, timeout, poll_frequency=0.5)
        1). driver:瀏覽器物件
        2). timeout:超時的時長,單位:秒
        3). poll_frequency:檢測間隔時間,預設為0.54. 呼叫方法 until(method):直到..1). method:呼叫EC.presence_of_element_located(element)
                    element:呼叫By類方法進行定位
# 導包-selenium
from selenium import webdriver
# 匯入顯示等待類
from selenium.webdriver.support.wait import WebDriverWait
# 匯入預期條件類 as 關鍵字起個別名為:EC
from selenium.webdriver.support import expected_conditions as EC
# 匯入By類
from selenium.webdriver.common.by import By
# 匯入時間包
from time import  sleep
# 例項化物件-火狐瀏覽器
driver=webdriver.Firefox()
url="E:\\雙元\\Web自動化\\02_其他資料\\註冊A.html"
# 開啟url
driver.get(url)
element=WebDriverWait(driver,30).until(EC.presence_of_element_located((By.ID,'userA')))
element.send_keys("admin")

sleep(3)
# 關閉瀏覽器
driver.quit()

參考連結:
https://www.cnblogs.com/zf612326/p/9309943.html

相關文章