因為你要查詢的標籤由於網速等原因遲遲沒有載入出來,你就直接獲取這個標籤,很明顯是報錯,現有的簡單粗暴的解決辦法就是time.sleep(3)
,睡幾秒,也就是設定執行緒等待,等這個標籤載入出來之後,再去使用。這麼著雖然簡單,但是相對死板,因為我們不知道這個標籤什麼時候載入出來,就大概寫死睡個幾秒,這可以,但如果這個標籤在極短的時間內就載入出來了,而你還在睡.......
例項
import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ec #判斷
from selenium.webdriver.support.ui import webdriverwait # 顯式等待
from selenium.webdriver.common.by import by
driver = webdriver.chrome()
wait = webdriverwait(driver, 10, 0.5)
driver.get("")
driver.find_element_by_id("kw").send_keys("na_years")
driver.find_element_by_id("su").click()
wait.until(ec.presence_of_element_located((by.link_text, 'na_years - '))).click()
#ec判斷頁面是否載入完成,載入完成就開啟
time.sleep(3)
driver.quit()
引數
selenium提供了
webdriverwait類實現等待機制。該類接收4個引數來指定等待機制。
from selenium import webdriver
from selenium.webdriver.support.ui import webdriverwait
driver = webdriver.chrome()
webdriverwait(driver=driver, timeout=10, poll_frequency=0.5, ignored_exceptions=none)
方法
上面用到的method驅動程式為expected_conditions
重新命名後的ec
,並呼叫其presence_of_element_located
方法判斷指定元素是否存在。
expected_conditions
模組提供了各種判斷:
與顯式等待不同的是,隱式等待我們可以直接通過瀏覽器驅動物件呼叫,並且用法也相對簡單:
import time
from selenium import webdriver
driver = webdriver.chrome()
driver.implicitly_wait(time_to_wait=10) # 只需要乙個等待超時時間引數
driver.get("")
driver.find_element_by_id("kw").send_keys("na_years")
driver.find_element_by_id("su").click()
print(driver.title)
driver.find_element_by_link_text("na_years - ").click()
time.sleep(3)
driver.quit()
implicitly_wait
等待時間單位為秒,如上例所示,我們指定了10秒。需要注意的是,隱式與顯式等待有明顯的區別,隱式等待應用於全域性,每當使用driver
驅動找某個元素時,隱式等待機制就會被觸發(導致測試速度變慢),如果元素存在,則繼續執行,否則,它將以輪詢的方式判斷元素是否定位成功,直至等待超時,丟擲錯誤nosuchelementexception
。而顯式等待則只是指定某(些)個元素是否存在時執行。
使用python提供的休眠機制(也就是time模組),這沒啥可說的,睡就完了,想在哪等就在哪等.......
import time
time.sleep(1)
在等待機制的選擇上,我們可以在三種等待機制中靈活選擇: Selenium之等待機制
當進行自動化測試的時候 from selenium import webdriver driver webdriver.chrome driver.get driver.find element by id kw send keys 聽雨危樓 cnblogs driver.find element ...
WebDriver元素等待機制
能否構建健壯和可靠的測試是ui自動化測試能否成功的關鍵因素之一。但實際情況是當乙個測試接著乙個測試執行的時候,常會遇到各種不同的狀況。比如指令碼去定位元素或去驗證程式的執行狀態時,有時會發現找不到元素,這可能是由於突然的資源受限或網路延遲等引起響應速度太慢所導致,這時會返回測試失敗的結果。so我們需...
09 元素等待機制
隱式等待相當於在webdriver級別的顯式等待 因為隱式等待一旦找到就會返回結果,而返回結果到指令碼,再接收到下一條操作剛才找到的元素的命令需要一段時間。這段時間可能頁面已經因為載入後續內容而發生了變化,之前找到的元素也受到了影響,於是操作元素的命令就無法正常執行了。因為隱式等待只要能定位到元素就...