1. 程式人生 > >selenium - 常用等待操作

selenium - 常用等待操作


# 4. 等待操作

# 強制等待
from time import sleep
sleep(10)


# 隱性等待
# 設定最長等待時間,在這個時間在只要有個時間點載入完成,則執行下一步程式碼,比sleep智慧,能夠自主判斷
# 整個driver的會話週期內,設定一次即可,
driver.implicitly_wait(10)


# 顯性等待
# 使用WebDriverWait類 和 excepted_conditions模組
# 明確某個條件滿足之後,再去執行下一步操作
# 程式每隔XX秒看一眼,如果條件成立了,則執行下一步;否則繼續等待,知道超過設定的最長時間,然後丟擲TimeoutException。

# (1)WebDriverWait類,顯性等待類:
# WebDriverWait(driver,等待時長,迴圈週期).until/until_not(判斷條件)
# A. until方法:表示直到滿足XXX條件,就不再等待了(在等待時間範圍內)
# B. until_not方法:表示直到不滿足XXX條件,就不再等待了
# 判斷條件 : 比如等待某個元素可見;等待新的窗口出現,等待元素包含某個檔案內容

# (2)expected_conditions模組,提供了一系列期望發生的條件

# A. 使用之前,引入相關的庫:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# B. 先確定元素的定位表示式
web_locator = 'xxxx'

# C. 呼叫WebDriverWait類設定等待總時長、輪詢週期
WebDriverWait(webdriver 物件名,等待總時長,輪詢週期).until(判斷條件)

# D. 使用expected_conditions對應的方法來生成判斷條件
# EC.方法名(定位方式,定位表示式)
EC.presence_of_element_located((By.CSS_SELECTOR,web_locator))

# 等待10秒鐘,每隔0.5秒去檢視login_name對應的元素是否可見;如果可見,等待結果;如果不可見,則繼續等待,直到10s結束,如果元素還是不可見,則丟擲超時異常
login_name = 'XXXX'
WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located((By.NAME,login_name)))