selenium時間等待方法

在UI自動化測試中,必然會遇到環境不穩定、網絡慢等狀況。當你以爲定位沒有問題,但程序卻直接報了元素不可見時,那你就須要思考是否由於程序運行太快或者頁面加載太慢而形成了元素不可見,必需要再等待直至元素可見和程序繼續運行。而在Selenium中,三種常見的等待方式都有各自的優勢或缺點,能夠在瞭解後嘗試針對不一樣的狀況選擇最優的等待方式。css

1.強制等待(sleep)git

設置等待最簡單的方法就是強制等待,其實就是time.sleep()方法,無論它什麼狀況,讓程序暫停運行必定時間,時間事後繼續運行;缺點是不智能,設置的時間過短,元素尚未加載出來,那照樣會報錯;設置的時間太長,則會浪費時間,不要小瞧每次幾秒的時間,case多了,代碼量大了,不少個幾秒就會影響總體的運行速度了;因此儘可能少用這個。github

#-- coding:utf-8 -- import time from datetime import datetime print (datetime.now()) #獲取當前時間 time.sleep(10) #設置等待時間10s print(datetime.now()) #再次獲取當前時間 代碼很簡單,主要是獲取當前時候後設置了一個等待時間,而後在等待時間後面設置一個事物,這個事物來查看等待時間結束後的當前時間。經過執行結果咱們很好地看到只有執行完畢等待之後纔會再次執行下一步驟。web

2.隱性等待(implicitly_wait())網絡

隱式等待實際是設置了一個最長等待時間,若是在規定時間內網頁加載完成,則執行下一步,不然一直等到時間結束,而後執行下一步。這樣的隱式等待會有個坑,咱們都知道js通常都是放在咱們的body的最後進行加載,實際這是頁面上的元素都已經加載完畢,咱們卻還在等待所有頁面加載結束。​​​​​​​測試

-- coding: utf-8 --

from selenium import webdriver import time driver = webdriver.Chrome()
driver.implicitly_wait(20) # 隱性等待,最長等30秒
driver.get('https://www.baidu.com') time.sleep(3) driver.quit() 隱式等待對整個driver週期都起做用,在最開始設置一次就能夠了。不要看成固定等待使用,到哪都來一下隱式等待。ui

3.顯示等待方式(WebDriverWait) 就是明確的要等待的元素在規定的時間以內都沒找到,那麼就拋出Exception.代碼示例以下:​​​​​​​utf-8

-- coding: utf-8 --

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Firefox() driver.get('https://huilansame.github.io')
WebDriverWait(driver,20,0.5).until( EC.presence_of_element_located((By.LINK_TEXT, 'CSDN')))
print driver.find_element_by_link_text('CSDN').get_attribute('href') driver.close()ci

WebDriverWait(driver,20,0.5).until(expected_conditions.presence_of_element_located(locator)),selenium中的wait模塊的WebDriverWait()方法,配合until或者until_not方法,再輔助以一些判斷條件,就能夠構成這樣一個場景:每通過多少秒就查看一次locator的元素是否可見,若是可見就中止等待,若是不可見就繼續等待直到超過規定的時間後,報超時異常;固然也能夠判斷某元素是否在規定時間內不可見等等的各類場景吧,須要根據你本身實際的場景選擇判斷條件;element

4.總結 隱式等待會等driver徹底加載完成(如js、css等);顯示等待僅僅校驗須要加載的元素是否存在;強制等待字面很好理解,就很少說。你們可根據需求自行選擇。下期預告:selenium多窗口切換方法。

睿江雲官網連接:https://www.eflycloud.com/home?from=RJ0037 ————————————————

相關文章
相關標籤/搜索