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...