Python+Selenium設置元素等待


顯式等待

顯式等待使 WebdDriver 等待某個條件成立時繼續執行,否則在達到最大時長時拋棄超時異常 (TimeoutException)。

#coding=utf-8

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

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

element = WebDriverWait(driver,5,0.5).until( EC.presence_of_element_located((By.ID,"kw")) )

element.send_keys('selenium') driver.quit()

 

expected_conditions 類提供一些預期條件的實現:

title_is 用於判斷標題是否 xx

title_contains 用於判斷標題是否包含 xx 信息

presence_of_element_located 元素是否存在

visibility_of_element_located 元素是否可見

visibility_of 是否可見

presence_of_all_elements_located 判斷一組元素是否存在

text_to_be_present_in_element 判斷元素是否有xx文本信息

text_to_be_present_in_element_value 判斷元素值是否有xx文本信息

frame_to_be_available_and_switch_to_it 表單是否可用,並切換到該表單

invisibility_of_element_located 判斷元素是否隱藏

element_to_be_clickable 判斷元素是否點擊,它處於可見和啟動狀態

staleness_of 等到一個元素不再是依附於DOM

element_to_be_selected 被選中的元素

element_located_to_be_selected 一個期望的元素位於被選中

element_selection_state_to_be 一個期望檢查如果給定的元素被選中

element_located_selection_state_to_be 期望找到一個元素並檢查是否選擇狀態

alert_is_present 預期一個警告信息

 

除了 expected_conditions 所提供的預期方法,我們也可以使用前面學過的 is_displayed()方法來判斷元 素是否可:

#coding=utf-8

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

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

input_ = driver.find_element_by_id("kw") element = WebDriverWait(driver,5,0.5).until( lambda driver : input_.is_displayed())

input_.send_keys('selenium')

driver.quit()

 

隱式等待

隱式等待是通過一定的時長等待頁面所元素加載完成。哪果超出了設置的時長元素還沒有被加載測拋NoSuchElementException 異常。WebDriver 提供了

 implicitly_wait()方法來實現隱式等待,默認設置為 0。它 的用法相對來說要簡單的多。

from selenium.webdriver.support.ui import WebDriverWait

driver.implicitly_wait(10)

implicitly_wait()默認參數的單位為秒,本例中設置等待時長為 10 秒,首先這 10 秒並非一個固定的等 待時間,它並不影響腳本的執行速度。其次,它並

不真對頁面上的某一元素進行等待,當腳本執行到某個 元素定位時,如果元素可定位那么繼續執行,如果元素定位不到,那么它將以輪詢的方式不斷的判

斷元素 是否被定位到,假設在第 6 秒鍾定位到元素則繼續執行。直接超出設置時長(10 秒)還沒定位到元素則拋 出異常。

 

sleep休眠方法

有時間我們希望腳本執行到某一位置時做固定時間的休眠,尤其是在腳本調試的過程中。那么可以使用 sleep()方法,需要說明的是 sleep()由 Python 的 time 模塊提供。

from time import sleep

sleep(2)

調用自己定義的函數

我們還可以調用自己寫的方法去查找元素。

def smart_find_element(driver,byType,value):
    ele = None;
    max_time = 10;
    times = 0;
    while(ele == None):
        try:
            ele = driver.find_element(byType,value);
        except :
            times += 1;
            if(times > max_time):
                raise Exception("can not find element");
            sleep(1);
    if(ele != None):
        return ele;

調用方法如下:

import SupportUtil 

#SupportUtil為方法存放的.py文件名
SupportUtil.smart_find_element(driver,By.CLASS_NAME,"search-icon").click()


免責聲明!

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



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