1. 程式人生 > >17、Selenium + Python 實現 UI 自動化測試-等待

17、Selenium + Python 實現 UI 自動化測試-等待

原文地址:http://blog.csdn.net/huilan_same/article/details/52544521

作者這篇文章寫的很詳細,很經典,就不再重新寫了。

總結一下:

1、強制等待——sleep(xxx)

不管如何,都等待xxx秒,才繼續執行下面的程式碼。

適合除錯程式碼用。

2、隱性等待——implicitly_wait(xxx)

隱式等待是設定了一個最長等待時間,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間截止,然後執行下一步。注意這裡有一個弊端,那就是程式會一直等待整個頁面載入完成,也就是一般情況下你看到瀏覽器標籤欄那個小圈不再轉,才會執行下一步,但有時候頁面想要的元素早就在載入完成了,但是因為個別js之類的東西特別慢,我仍得等到頁面全部完成才能執行下一步,我想等我要的元素出來之後就下一步怎麼辦?有辦法,這就要看selenium提供的另一種等待方式——顯性等待wait了

3、顯性等待

顯性等待某個元素,元素找到了,即便頁面其它的 js 等檔案載入不完,也執行。顯性等待效果好,但是操作較複雜,一般來說,掌握好前兩種等待方法,就能解決掉大部分的問題。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.implicitly_wait(20
) driver.get('http://www.baidu.com/') locator = (By.LINK_TEXT,'地圖') try: WebDriverWait(driver,20,0.5).until(expected_conditions.presence_of_element_located(locator)) driver.find_element_by_link_text('地圖').click() finally: driver.quit()

補充一點:

有這樣一個頁面xxx,開啟後元素a,需要5秒才能加載出來,請問下面的程式碼是否能執行成功?

1、 使用implicitly_wait(20)

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(20)
driver.get("xxx")
driver.find_element_by_link_text('元素a').click()
driver.quit()

2、使用implicitly_wait(20)

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(20)
driver.get("xxx")
ele = driver.find_element_by_link_text('元素a')
ele.click()
driver.quit()
這個程式碼能執行成功嗎?

第一個程式碼,定位元素,然後點選click

第二個程式碼,先把元素賦值給變數,然後變數使用click方法

程式碼1執行成功

程式碼2執行失敗

分析:

程式碼1:implicitly_wait(20) ,對某個元素執行操作的時候,如果找不到元素就等待,找到了就執行操作,等20秒還找不到才報錯。

程式碼2:賦值語句,不是對元素進行操作,找不到元素,賦值直接失敗,報錯。