一、基礎介紹
瀏覽器載入一個頁面時,頁面內的元素可能是在不同的時間載入的,這會加大定位元素的困難程度,為了讓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模組預期條件
- 這兩個條件類驗證title,驗證傳入的引數title是否等於或包含於driver.title
title_is
title_contains - 一個只要一個符合條件的元素載入出來就透過;另一個必須所有符合條件的元素都載入出來才行
presence_of_element_located
presence_of_all_elements_located - 這三個條件驗證元素是否可見,前兩個傳入引數是元組型別的locator,第三個傳入WebElement,第一個和第三個其實質是一樣的
visibility_of_element_located
invisibility_of_element_located
visibility_of - 這兩個人條件判斷某段文字是否出現在某元素中,一個判斷元素的text,一個判斷元素的value
text_to_be_present_in_element
text_to_be_present_in_element_value - 這個條件判斷frame是否可切入,如果可切入就執行切入。可傳入locator元組或者直接傳入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it - 這個條件判斷是否有alert出現
alert_is_present - 這個條件判斷元素是否可點選,傳入locator
element_to_be_clickable - 這四個條件判斷元素是否被選中,第一個條件傳入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 - 這個方法用於判斷新視窗是否開啟,傳入開啟新視窗之前的window_handles
new_window_is_opened - 這4 個方法是校驗URL的,分別是檢查當前url是否包含,pattern是預期的模式,檢查當前url的期望,不相等返回true
url_contains
url_matches
url_to_be
url_changes