selenium2 顯式 waits

2021-07-02 17:06 更新

顯式的?waits?等待一個確定的條件觸發(fā)然后才進行更深一步的執(zhí)行。最糟糕的做法是?time.sleep()?,這里指定的條件是等待一個固定的時間段。使用?WebDriverWait?結(jié)合?ExpectedCondition?是一種便利的方法,它可以讓你編寫的代碼根據(jù)實際情況確定等待的時間:

from 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.Firefox()
driver.get("http://m.hgci.cn")
try:
    element = WebDriverWait(driver,10).until(
        EC.presence_of_element_located((By.NAME,"w"))
    )
finally:
    driver.quit()

這段代碼會等待10秒,如果10秒內(nèi)找到元素則立即返回,否則會拋出?TimeoutException?異常,?WebDriverWait?默認每500毫秒調(diào)用一下?ExpectedCondition?直到它返回成功為止。?ExpectedCondition?類型是布爾型,成功的返回值就是?true?,其他類型的?ExpectedCondition?成功的返回值就是 ?not null?。

詳細的?ExpectedCondition?可以參看  瀏覽器驅(qū)動。

預(yù)期條件

自動化網(wǎng)頁操作時,有許多頻繁使用到的通用條件。下面列出的是每一個條件的實現(xiàn)。Selenium + Python 提供了許多方便的方法,因此你不需要自己編寫?expected_condition?的類,或者創(chuàng)建你自己的通用包。

  • ?title_is?
  • ?title_contains?
  • ?presence_of_element_located?
  • ?visibility_of_element_located?
  • ?visibility_of?
  • ?presence_of_all_elements_located?
  • ?text_to_be_present_in_element?
  • ?text_to_be_present_in_element_value?
  • ?frame_to_be_available_and_switch_to_it?
  • ?invisibility_of_element_located?
  • ?element_to_be_clickable ?- 元素展示并且可用
  • ?staleness_of?
  • ?element_to_be_selected?
  • ?element_located_to_be_selected?
  • ?element_selection_state_to_be?
  • ?element_located_selection_state_to_be?
  • ?alert_is_present?
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver,10)
element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))

?expected_conditions?模塊包含了一系列預(yù)定義的條件來和?WebDriverWait?使用。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號