selenium 設置等待時間


有些網站打開地址或者進行操作后,頁面需要加載幾秒鍾,或者等待某一元素加載完成后再繼續下一步操作,這里就需要進行設置等待時間

導入time模塊,time模塊是python自帶的,無需下載


一、設置等待時間有三種方法:

1、強制等待

time.sleep(time)     # 強制等待3秒后,進行下一步操作,也可以是小數,單位為秒 

 

缺點:不能准確把握需要等待的時間(有時候操作未完成,等待就結束了,導致報錯;有時候操作已經完成了,但時間還沒到,浪費時間),如果再用例中大量使用,會浪費不必要的等待時間,影響用例的執行效率。

優點:使用簡單,可以在調試時使用。

 

2、隱式等待 

driver.implicitly_wait(X),在X時間內,頁面加載完成,進行下一步操作。

缺點:使用隱式等待,程序會一直等待頁面加載完成,才會執行下一步操作

(有時候頁面想要的元素早已加載完成了,但是頁面上個別元素還沒有加載完成,仍要等待頁面全部完成才能執行下一步,使用 也不是很靈活)

優點:隱式等待對整個driver的周期都起作用,所以只要設置一次即可

3、顯示等待 

from selenium.webdriver.support.wait import WebDriverWait 

 WebDriverWait(driver, 超時時間, 調用頻率, 要忽略的異常).until(要執行的方法, 超時時返回的錯誤信息)

 

優點:使用相對比較復雜

缺點:等地啊判斷准確,不會浪費多余的等待時間,在用例中使用,可以提高執行效率

 

 示例:打開登錄頁面,以登錄按鈕為頁面加載成功的標志,如果20秒內,定位到登錄按鈕,就進行登錄操作,不再繼續等待,如果20秒內還沒定位到登錄按鈕,下一步操作就會報錯,並拋出異常。 

from selenium import webdriver

import time 

from selenium.webdriver.support.wait import WebDriverWait 

from selenium.webdriver.support import expect_conditions as EC

  from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("http://www.baidu.com/) 

# 加載等等,等待加載頁面,根據目標頁面特征元素進行判斷

 locatorLogin = (By.TAG_NAME,"button")

try:

WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locatorLogin)) 

print("登錄頁面加載出來啦") 

except:

print("頁面加載失敗") 

 

# 頁面加載完成后,進行用例的相應操作

ownerSite = driver.find_element_by_id("ownerSite")

ownerSite.clear()

ownerSite.click()

ownerSite.send_keys(u"今天星期幾") 

  ......

......

 

二、WebDriverWait類

1、until() 

until()方法:直到條件成立返回為真,等待結束。如果超時,拋出TimeoutException,將message傳入異常。 

 

2、until_not()

until_not()方法:直到條件不成立返回為真,是當某元素消失或什么條件不成立則繼續執行,等待結束。如果超時,拋出TimeoutException,將message傳入異常。 

 

3、excepted_conditions異常處理模塊

expected_conditions是selenium的一個模塊,其中包含一系列可用於判斷的條件方法。 

 

 三、WebDriverWait自帶的方法

is_displayed():判斷元素是否被展示出來

is_enable():判斷元素是否可操作

is_select():判斷元素是否被選擇 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM