1. 程式人生 > 其它 >web自動化測試(六)直接等待、隱式等待與顯示等待

web自動化測試(六)直接等待、隱式等待與顯示等待

為什麼需要等待

避免頁面未渲染完成後操作導致報錯,或可能會因為網速等原因直接操作元素產生報錯

強制等待

問題:頁面元素未載入完成導致後續元素操作報錯
解決方案:在報錯的元素操作之前新增等待
原理:強制等待,執行緒休眠一定時間
方法:time.sleep(5)

隱式等待

問題:難以確定元素載入的具體等待時間
解決方案:使用隱式等待新增配置
原理:設定一個等待時間,輪詢查詢(預設0.5秒)元素是否出現,如果沒出現就丟擲異常
方法:driver.implicitly_wait(5)

顯示等待

問題:元素可以找到,使用點選等操作,出現報錯
解決方案:使用顯式等待
原理:
在最長等待時間內,輪詢,是否滿足結束條件
因為頁面元素載入是非同步載入過程,通常html會先載入完成,js、css其後
元素存在與否是由HTML決定,元素的互動是由css或者js決定
隱式等待只關注元素能不能找到,不關注元素能否點選或者進行其他的互動
方法: WebDriverWait(driver例項, 最長等待時間, 輪詢時間).until(結束條件)
示例:

def wait_until():
    driver = webdriver.Chrome()
    driver.get("https://xxx")
    WebDriverWait(driver, 10).until(
        expected_conditions.element_to_be_clickable(
            (By.CSS_SELECTOR, '#success_btn')))
    driver.find_element(By.CSS_SELECTOR, "#success_btn").click()

總結

型別 使用方式 原理 適用場景
直接等待 time.sleep(等待時間)) 強制執行緒等待 除錯程式碼,臨時性新增
隱式等待 driver.implicitly_wait(等待時間) 在時間範圍內,輪詢查詢元素 解決找不到元素問題,無法解決互動問題
顯式等待 WebDriverWait(driver例項, 最長等待時間, 輪詢時間).until(結束條件) 設定特定的等待條件,輪詢操作 解決特定條件下的等待問題,比如點選等互動性行為