在ui自動化測試中,必然會遇到環境不穩定、網路慢等情況。當你覺得定位沒有問題,但程式卻直接報了元素不可見時,那你就需要思考是否因為程式執行太快或者頁面載入太慢而造成了元素不可見,必須要再等待直至元素可見和程式繼續執行。而在selenium中,三種常見的等待方式都有各自的優點或缺點,可以在了解後嘗試針對不同的情況選擇最優的等待方式。
1.強制等待(sleep)
設定等待最簡單的方法就是強制等待,其實就是time.sleep()方法,不管它什麼情況,讓程式暫停執行一定時間,時間過後繼續執行;缺點是不智慧型,設定的時間太短,元素還沒有載入出來,那照樣會報錯;設定的時間太長,則會浪費時間,不要小瞧每次幾秒的時間,case多了,**量大了,很多個幾秒就會影響整體的執行速度了;所以盡量少用這個。
#-*- coding:utf-8 -*-
import time
from datetime import datetime
print (datetime.now()) #獲取當前時間
time.sleep(10) #設定等待時間10s
print(datetime.now()) #再次獲取當前時間
**很簡單,主要是獲取當前時候後設定了乙個等待時間,然後在等待時間後面設定乙個事物,這個事物來檢視等待時間結束後的當前時間。通過執行結果我們很好地看到只有執行完畢等待以後才會再次執行下一步驟。
2.隱性等待(implicitly_wait())
隱式等待實際是設定了乙個最長等待時間,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間結束,然後執行下一步。這樣的隱式等待會有個坑,我們都知道js一般都是放在我們的body的最後進行載入,實際這是頁面上的元素都已經載入完畢,我們卻還在等待全部頁面載入結束。
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
driver = webdriver.chrome()
driver.implicitly_wait(20) # 隱性等待,最長等30秒
driver.get('')
time.sleep(3)
driver.quit()
隱式等待對整個driver週期都起作用,在最開始設定一次就可以了。不要當作固定等待使用,到哪都來一下隱式等待。
3.顯示等待方式(webdriverwait)
就是明確的要等待的元素在規定的時間之內都沒找到,那麼就丟擲exception.**示例如下:
# -*- 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('')
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()
webdriverwait(driver,20,0.5).until(expected_conditions.presence_of_element_located(locator)),selenium中的wait模組的webdriverwait()方法,配合until或者until_not方法,再輔助以一些判斷條件,就可以構成這樣乙個場景:每經過多少秒就檢視一次locator的元素是否可見,如果可見就停止等待,如果不可見就繼續等待直到超過規定的時間後,報超時異常;當然也可以判斷某元素是否在規定時間內不可見等等的各種場景吧,需要根據你自己實際的場景選擇判斷條件;
4.總結
隱式等待會等driver完全載入完成(如js、css等);顯示等待僅僅校驗需要載入的元素是否存在;強制等待字面很好理解,就不多說。大家可根據需求自行選擇。下期預告:selenium多視窗切換方法。
Selenium等待時間
三種網頁處理等待時間方式 1,強制等待 多用於自己除錯 用 from selenium import webdriver from time import sleep driver webdriver.firefox driver.get sleep 3 2,隱性等待 設定了乙個最長等待時間,如果在...
selenium 等待時間
三種時間模式 1 隱性等待 等待頁面所有元素都載入完才執行下一步,如果在設定的時間內沒有載入完成所有元素,則丟擲異常 隱式等待對整個driver週期都起作用,即設定一次後,所有執行都會有效 from selenium import webdriver import time driver webdr...
Selenium 設定等待時間
sleep 設定固定休眠時間。python 的time 包提供了休眠方法sleep 匯入time 包後就可以使用sleep 進行指令碼的執行過程進行休眠。implicitly wait 是webdirver 提供的乙個超時等待。隱的等待乙個元素被發現,或乙個命令完成。如果超出了設定時間的則丟擲異常。...