WebDriverWait類提供了顯式等待和隱式等待,顯式等待的等待時間是固定的,固定了10s就必須等待10s,隱式等待的等待時間是個范圍,例如最大10s,那么如果在3s的時候程序達到預期的結果,那么就不在繼續后面的7秒,直接進入下一步操作,而如果超出10s還沒有相應,程序就會報出相應的錯誤。
一、顯式等待和隱式等待
WebDriverWait()是顯式等待,等待的時間是固定的
implicitly_wait()方法是隱式等待,用來設置超時,一般把implicitly_wait()方法調用在加載測試地址后,等待所測試的應用程序加載。
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://baidu.com')
driver.implicitly_wait(30)
二、介紹顯式等待的幾種常用的方法
1、element_to_be_clickable(locator)等待元素可見且可點擊后,再進行操作,元素在指定時間內不可見就引發異常TimeoutException,源碼截圖如下:
返回的是元素element本身
2、text_to_be_present_in_element(locator,text)驗證相應位置的文本信息,返回布爾。源碼截圖如下:
3、visibility_of_element_located(locator)指定位置元素可見后再執行其他操作,返回元素本身,源碼截圖如下:
二、以百度為例,編寫代碼驗證以上三個方法。
webdriver提供WebDriverWait類和expected_conditions模塊來執行一個顯式的等待
#coding=utf-8
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://baidu.com')
driver.implicitly_wait(30)
#1.............................
#元素是否出現可點 ,參數是locator
# xinwei=WebDriverWait(driver,5).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'.mnav')))
# xinwei.click()
# driver.quit()
#2.............................
#驗證相應位置元素的文本信息,返回值是布爾 倆參數locator text
# #以驗證登錄的錯誤信息為例
# driver.find_element_by_xpath(".//*[@id='u1']/a[7]").click()
# driver.find_element_by_id('TANGRAM__PSP_10__userName').send_keys('123')
# driver.find_element_by_id('TANGRAM__PSP_10__submit').click()
# bo=WebDriverWait(driver,5).until(expected_conditions.text_to_be_present_in_element((By.CSS_SELECTOR,'#TANGRAM__PSP_10__error'),U'請您輸入密碼'))
# print bo# 打印結果:True
# driver.quit()
#3...............................
# 元素是否可見,可見后操作 參數是locator
# sou=WebDriverWait(driver,5).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR,'#kw')))
# sou.send_keys('java')
# time.sleep(2)
# driver.quit()
三、解析代碼中的WebDriverWait(driver,5).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR,'#kw')))
WebDriverWait(driver,5)是實例化WebDriverWait類,等待是顯示等待,時間是5秒
.until是實例化的類調用類的方法
expected_conditions是個模塊.py,后面的.visibility_of_element_located是模塊調用他的各個方法