等待操作
為了保證指令碼的穩定性,有時候需要引入等待時間,等待頁面載入元素後再進行操作,selenium提供三種等待時間設定方式。
三種等待時間設定方式
1、固定等待
sleep():固定休眠時間設定,python的time包裡提供了休眠方法sleep,匯入包後就能使用;sleep()方法以秒為單位,如果超時設定小於1秒,可以使用小數
匯入包:import time
time.sleep(2) 固定等待2秒
time.sleep(0.5) 固定等待0.5秒
**如下:
importosimport
time
from selenium import
webdriver
from selenium.webdriver.common.by import
bycurrent_path = os.path.dirname(os.path.abspath(__file__)) #
當前路徑
driver_path = os.path.join(current_path,'
../webdriver/chromedriver.exe
') #
driver路徑
pages_path = os.path.join(current_path,'
../pages/wait.html
') #
本地網頁路徑
driver = webdriver.chrome(executable_path=driver_path) #
firefox,ie等
driver.get(
'file://%s
'%pages_path) #
本地網頁開啟file:// 開啟部署好的站點http://
driver.find_element(by.xpath,
'//button
').click()
time.sleep(5) #
固定等待 優點:簡單易用 缺點:不適合網頁中元素載入時間不定的情況
value = driver.find_element(by.xpath,'
//div
').get_attribute('
class')
print( value )
2、隱式等待
implicitlywait():implicitlywait()方法比sleep()方法智慧型,sleep()方法只能在乙個固定的時間等待,而implicitlywait()可以在乙個時間範圍內等待,稱為隱式等待
隱式等待語法:driver.implicitly_wait(30) 全域性設定隱式等待30秒
備註:設定等待時間30s,頁面上的元素5s後出現,只等待5s。不會等待30秒
**如下:
importosfrom selenium import
webdriver
from selenium.webdriver.common.by import
bycurrent_path = os.path.dirname(os.path.abspath(__file__)) #
當前路徑
driver_path = os.path.join(current_path,'
../webdriver/chromedriver.exe
') #
driver路徑
pages_path = os.path.join(current_path,'
../pages/wait.html
') #
本地網頁路徑
driver = webdriver.chrome(executable_path=driver_path) #
firefox,ie等
#隱式等待,全域性設定(它之後的所有find_element都會生效)
#執行機制:每隔0.5秒檢查頁面是否出現元素,如果出現,則識別成功進行後續操作
#如果設定時間都沒找到元素,則報錯
driver.implicitly_wait(30)
driver.get(
'file://%s
'%pages_path) #
本地網頁開啟file:// 開啟部署好的站點http://
driver.find_element(by.xpath,
'//button
').click()
value = driver.find_element(by.xpath,'
//div
').get_attribute('
class
') #
獲取class的屬性值
print( value )
3、顯示等待
webdriverwait(): 顯示等待,針對單個元素生效
前置條件:匯入顯示等待包 from selenium.webdriver.support.ui import webdriverwait
語法格式如下:webdriverwait(driver,timeout,poll_frequency=0.5,ignore_exceptions=none)
driver:webdriver的驅動程式(ie,火狐,谷歌或遠端)
timeout:最長超時時間,預設以秒為單位
poll_frequency:休眠時間的間隔(步長)時間,預設為0.5秒(即每500毫秒掃瞄一次頁面)
ignore_exceptions:超時後的異常資訊,預設情況下拋nosuchelementexception異常
引入webdriverwait類
element_obj = webdriverwait(driver,30,0.5).until(lambda dr:dr.find_element(by.xpath,'//div'))
**如下:
importosfrom selenium import
webdriver
from selenium.webdriver.common.by import
byfrom selenium.webdriver.support.ui import webdriverwait #
顯示等待類
current_path = os.path.dirname(os.path.abspath(__file__)) #
當前路徑
driver_path = os.path.join(current_path,'
../webdriver/chromedriver.exe
') #
driver路徑
pages_path = os.path.join(current_path,'
../pages/wait.html
') #
本地網頁路徑
driver = webdriver.chrome(executable_path=driver_path) #
firefox,ie等
driver.get(
'file://%s
'%pages_path) #
本地網頁開啟file:// 開啟部署好的站點http://
driver.find_element(by.xpath,'
//button
').click()
#顯示等待:1、單個元素設定生效 2、頁面掃瞄時間可以自定義配置
element_obj = webdriverwait(driver,30,0.5).until(lambda dr:dr.find_element(by.xpath,'
//div'))
print( element_obj.get_attribute('
class
') ) #
獲取class屬性值
Selenium筆記(6)等待
1.簡介 在selenium操作瀏覽器的過程中,每一次請求url,selenium都會等待頁面載入完畢以後,才會將操作許可權再次交給我們的程式。但是,由於ajax和各種js 的非同步載入問題,所以我們在使用selenium的時候常常會遇到操作的元素還沒有載入出來,就會引發報錯。為了解決這個問題,se...
10 等待執行緒死亡join方法
等待執行緒死亡 join 方法假設有三個執行緒,分別是執行緒a,執行緒b,和執行緒c他們各自的任務分別是列印數字 一 數字2和數字三,這三個執行緒同時啟動,如何讓這三個執行緒按順序執行任務,也就是按順序列印123,如果想讓多個執行緒按順序執行,可以使用thread類裡面的join方法,它的作用是等待...
十 selenium10 瀏覽器多視窗處理
瀏覽器多視窗處理 有時候我們在測試乙個web應用的時候會出現多個瀏覽器視窗的情況,webdriver提供了相應的解決方案,如下 首先要獲得每乙個視窗的唯一識別符號號 控制代碼 通過獲得的控制代碼來區分不同的 視窗,從而對不同視窗上的元素進行操作。nowhandle driver.current wi...