Python selenium的三種等待方式

2021-10-07 14:45:49 字數 2886 閱讀 6189

time.sleep(3)這種方式簡單粗暴,必須等xx時間,不管你瀏覽器是否載入完了,程式都得等3秒,然後繼續執行下面的**,太死板,嚴重影響程式的執行速度。可以作為除錯用,有時**裡面也這樣用。

implicitly_wait(xx)設定乙個最長等待時間,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間截止,然後執行下一步。好處是不用像強制等待(time.sleep(n))方法一樣死等固定的時間n秒,可以在一定程度上提公升測試用例的執行效率。不過這種方法也從在乙個弊端,那就是程式會一直等待整個頁面載入完成,也就是說瀏覽器視窗標籤中不再出現轉動的小圈圈,再會繼續執行下一步,比如有些時候想要的頁面元素早就載入完了,但由於個別js資源載入稍慢,此時程式仍然會等待頁面全部載入完成才繼續執行下一步,這無形中加長了測試用例的執行時間。

注意:隱式等待時間只需要被設定一次,然後它將在driver的整個生命週期都起作用。

# encoding=utf-8

import unittest

import time

from selenium import webdriver

from selenium.webdriver import actionchains

class

visitsogoubyie

(unittest.testcase)

:def

setup

(self)

:# 啟動ie瀏覽器

# self.driver = webdriver.firefox(executable_path = "d:\\geckodriver")

self.driver = webdriver.ie(executable_path=

"d:\\iedriverserver"

)def

test_implictwait

(self)

:# 匯入異常類

from selenium.common.exceptions import nosuchelementexception, timeoutexception

# 匯入堆疊類

import traceback

url =

""# 訪問sogou首頁

self.driver.get(url)

# 通過driver物件implicitly_wait()方法來設定隱式等待時間,最長等待10秒,如果10秒內返回則繼續執行後續指令碼

self.driver.implicitly_wait(10)

try:

# 查詢sogou首頁的搜尋輸入框頁面元素

searchbox = self.driver.find_element_by_id(

"query"

)# 在搜尋輸入框中輸入「川普能否連任」

searchbox.send_keys(u"川普能否連任"

)# 查詢sogou首頁搜尋按鈕頁面元素

click = self.driver.find_element_by_id(

"stb"

) click.click(

)except

(nosuchelementexception, timeoutexception)

as e:

# 列印異常的堆疊資訊

traceback.print_exc(

)def

teardown

(self)

:# 退出ie瀏覽器

self.driver.quit(

)if __name__ ==

'__main__'

: unittest.main(

)

我想等我要的元素出來之後就下一步怎麼辦?有辦法,這就要看selenium提供的另一種等待方式——顯性等待wait了。

通過selenium.webdriver.support.ui模組提供的webdriverwait類,再結合該類的until()和until_not()方法,並自定義好顯式等待的條件,然後根據判斷條件進行靈活的等待。

顯式等待的工作原理:程式每隔xx秒看一眼,如果條件成立了,則執行下一步,否則繼續等待,直到超過設定的最長時間,然後丟擲timeoutexception。

#encoding=utf-8

from selenium import webdriver

import time

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.ie(executable_path =

"d:\\iedriverserver"

)driver.get(

"")input_box=driver.find_element_by_id(

"query"

)wait = webdriverwait(driver,10,

0.2)

wait.until(ec.visibility_of(input_box)

)input_box.send_keys(u"北京新發地"

)wait.until(ec.element_to_be_clickable(

(by.id ,

"stb"))

)button=driver.find_element_by_id(

"stb"

)button.click(

)time.sleep(3)

driver.close(

)

Python Selenium環境搭建

安裝python 設定 python 的環境變數 安裝目錄 安裝目錄 scripts 使用 pip安裝 selenium pip install selenium 安裝完python pip工具,在安裝目錄的 scripts 目錄下。在 dos下直接執行 pip install selenium 即...

Python Selenium 學習筆記

1 判斷元素是否存在 try driver.find element.xx a true except a false if a true print 元素存在 elif a false print 元素不存在 2 判斷元素是否顯示 driver.find element by id outputb...

Python Selenium錯誤小結

因為要使用web應用,所以開始用起了,selenium包,安裝倒是挺容易的,但就是出了很多bug。filenotfounderror winerror 2 系統找不到指定的檔案。通過錯誤反饋發現是要把該軟體加到路徑裡面,但是,設定了系統環境變數後發現還是不行,最後,使用了乙個非常原始的方法 brow...