Selenium 10 等待操作

2022-09-09 21:57:35 字數 4075 閱讀 7444

等待操作

為了保證指令碼的穩定性,有時候需要引入等待時間,等待頁面載入元素後再進行操作,selenium提供三種等待時間設定方式。

三種等待時間設定方式

1、固定等待

sleep():固定休眠時間設定,python的time包裡提供了休眠方法sleep,匯入包後就能使用;sleep()方法以秒為單位,如果超時設定小於1秒,可以使用小數

匯入包:import time

time.sleep(2)  固定等待2秒

time.sleep(0.5)  固定等待0.5秒

**如下:

import

osimport

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秒

**如下:

import

osfrom 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'))

**如下:

import

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