等待頁面元素(webdriverwait)


前言

  在腳本中加入太多的 sleep 后會影響腳本的執行速度,雖然 implicitly_wait ()這種方法隱式等待方法一定程度上節省了很多時間。
但是一旦頁面上某些 js 無法加載出來(其實界面元素經出來了),左上角那個圖標一直轉圈,這時候會一直等待的。

implicitly_wait():隱式等待

1)當使用了隱士等待執行測試的時候,如果 WebDriver沒有在 DOM中找到元素,將繼續等待,超出設定時間后則拋出找不到元素的異常

2) 換句話說,當查找元素或元素並沒有立即出現的時候,隱式等待將等待一段時間再查找 DOM,默認的時間是0

3) 一旦設置了隱式等待,則它存在整個 WebDriver 對象實例的聲明周期中,隱式的等到會讓一個正常響應的應用的測試變慢

4)它將會在尋找每個元素的時候都進行等待,這樣會增加整個測試執行的時間。

實例源碼:

# coding:utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep,ctime

driver=webdriver.Firefox()
driver.get("http://www.baidu.com")

sleep(2)
# 隱式等待
driver.implicitly_wait(5)
try:
    print (ctime())
    driver.find_element_by_css_selector("#kw").send_keys("python")
    driver.find_element_by_css_selector("#su").click()
except NoSuchElementException as msg:
    print (msg)
finally:
    print (ctime())

sleep(3)
driver.quit()

顯示等待(參數解釋)

1)這里主要有三個參數:class WebDriverWait(object):driver, timeout, poll_frequency
2)driver:返回瀏覽器的一個實例
3)timeout:超時的總時長
4)poll_frequency:循環去查詢的間隙時間,默認 0.5 秒

案例源碼:

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

from time import sleep

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

driver.find_element_by_css_selector("#kw").send_keys(u"51自學網")
sleep(2)

# 顯示等待
element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'su')))
element.click()
sleep(2)

driver.quit()

元素出現:until()

1.until 里面有個 lambda 函數,這個語法看 python 文檔吧
2.以百度輸入框為例

元素消失:until_not ()

1.判斷元素是否消失

參考代碼

 coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
# 等待時長 10 秒,默認 0.5 秒詢問一次
WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("kw")).send_keys("yoyo")
# 判斷 id 為 kw 元素是否消失
disappeared = WebDriverWait(driver, 10, 1).until_not(lambda x: x.find_element_by_id("kw").is_displayed())
print disappeared
driver.quit()

WebDriverWait主要提供了兩個方法,一個是 until(),另外一個是 until_not()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM