Selenium等待事件Waits

Sonoop發表於2024-11-25

一、基礎介紹

瀏覽器載入一個頁面時,頁面內的元素可能是在不同的時間載入的,這會加大定位元素的困難程度,為了讓Selenium可以智慧地等待網頁載入完成,就需要使用“WebDriverWait”和“EC”

基本格式

WebDriverWait(driver,10).until(EC.presence_of_element_located())

例子

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.Chrome(r'C:\\tools\\chromedriver.exe')
driver.get("https://exercise.kingname.info/exercise_advanced_ajax.html")
try:
    WebDriverWait(driver,30).until(EC.text_to_be_present_in_element((By.CLASS_NAME,"content"),'通關'))
except Exception as _:
    print('不等了')

element = driver.find_element(By.XPATH,'//div[@class="content"]')
print(f'網站載入的內容是{element.text}')
driver.quit()

EC模組預期條件

  1. 這兩個條件類驗證title,驗證傳入的引數title是否等於或包含於driver.title
    title_is
    title_contains
  2. 一個只要一個符合條件的元素載入出來就透過;另一個必須所有符合條件的元素都載入出來才行
    presence_of_element_located
    presence_of_all_elements_located
  3. 這三個條件驗證元素是否可見,前兩個傳入引數是元組型別的locator,第三個傳入WebElement,第一個和第三個其實質是一樣的
    visibility_of_element_located
    invisibility_of_element_located
    visibility_of
  4. 這兩個人條件判斷某段文字是否出現在某元素中,一個判斷元素的text,一個判斷元素的value
    text_to_be_present_in_element
    text_to_be_present_in_element_value
  5. 這個條件判斷frame是否可切入,如果可切入就執行切入。可傳入locator元組或者直接傳入定位方式:id、name、index或WebElement
    frame_to_be_available_and_switch_to_it
  6. 這個條件判斷是否有alert出現
    alert_is_present
  7. 這個條件判斷元素是否可點選,傳入locator
    element_to_be_clickable
  8. 這四個條件判斷元素是否被選中,第一個條件傳入WebElement物件;第二個傳入locator元組;第三個傳入WebElement物件以及狀態,相等返回True,否則返回False;第四個傳入locator以及狀態,相等返回True,否則返回False
    element_to_be_selected
    element_located_to_be_selected
    element_selection_state_to_be
    element_located_selection_state_to_be
  9. 這個方法用於判斷新視窗是否開啟,傳入開啟新視窗之前的window_handles
    new_window_is_opened
  10. 這4 個方法是校驗URL的,分別是檢查當前url是否包含,pattern是預期的模式,檢查當前url的期望,不相等返回true
    url_contains
    url_matches
    url_to_be
    url_changes

相關文章