使用selenium開發瀏覽器自動化程式一定會經常遇到頁面載入等待的問題,由於不同的**會有各種不同的動態載入機制,如果設定延時不恰當,那麼程式異常報錯將變成家常便飯,所以巧妙的設定好動態的延時才能開發出穩定高效的程式。
常用等待頁面載入的方法:
#開發測試階段會用到,生產環境極少用到
import time
time.sleep(x)
#生產大量使用
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import by
webdriverwait(driver, x).until(condition)
webdriverwait常見用法:
#by id
webdriverwait(driver,30).until(ec.presence_of_element_located((by.id,'menu')))
#by xpath
webdriverwait(driver,30).until(ec.presence_of_element_located((by.xpath,'//*[@id="ajax_response"]/table[1]')))
#by link text
webdriverwait(driver,30).until(ec.presence_of_element_located((by.link_text,'software')))
webdriverwait(driver,30).until(lambda driver: driver.find_element_by_xpath('//*[@id="export"]/div/div[2]/span[2]/a').is_displayed())
# 當前瀏覽器tab數量大於1時,將driver切換到第二個瀏覽器tab
defwait_newtab
(driver):
if len(driver.window_handles) > 1:
return
true
else:
return
false
webdriverwait(driver,30).until(lambda driver: wait_newtab(driver))
driver.switch_to.window(driver.window_handles[1])
把自定義等待條件寫成單獨的方法,當條件滿足時返回true, 當條件不滿足時,則返回false, 然後用上述方法去呼叫自定義等待函式,達到靈活等待的目的。 Selenium 元素等待
這是乙個在寫自動化指令碼時經常遇到的問題。試想這樣的乙個場景,通過指令碼開啟乙個網頁,可是由於網路的問題頁面並沒有及時載入進來,這時候如果已經執行到之後查詢元素的 那麼勢必會丟擲錯誤找不到相應元素,而事實並非如此。如果沒有合適的元素等待處理,這樣的測試 不僅不夠健壯,過多的誤報會消耗測試人員大量的精...
Selenium元素等待
一 為什麼要使用元素等待?原因 由於電腦配置或者網路原因,在查詢元素時,元素 未在第一時間內被載入出來,而丟擲未能找到元素的異常。二 什麼是元素等待?元素在第一次未找到時,元素等待設定的時長被啟用,如果在設定的有效時長內找到元素,繼續執行 如果超出設定的時長未找到元素,丟擲未找到元素異常。三 元素等...
selenium 顯示等待
顯示等待的 定義了等待條件,只有該條件觸發,才執行後續 最垃圾的顯示等待就是使用 time.sleep 這種情況是指定了固定的等待時長。存在一些特別方便的方法,可以使你的 只等待需要的時常,而不是固定的時常。webdriverwait 和 expectedcondition 組合使用,就是一種有效的...