欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java使用selenium自動(dòng)化WebDriver等待的示例代碼

 更新時(shí)間:2023年09月19日 14:28:02   作者:月丨曦  
顯式等待和隱式等待是WebDriver中兩種常用的等待方式,它們都可以用來(lái)等待特定的條件滿足后再繼續(xù)執(zhí)行代碼,本文給大家介紹java使用selenium自動(dòng)化WebDriver等待,感興趣的朋友一起看看吧

java使用selenium自動(dòng)化WebDriver等待

顯式等待和隱式等待是WebDriver中兩種常用的等待方式,它們都可以用來(lái)等待特定的條件滿足后再繼續(xù)執(zhí)行代碼。

1.顯式等待(Explicit Wait):使用WebDriverWait類來(lái)實(shí)現(xiàn),可以根據(jù)特定條件等待元素出現(xiàn)、可見、可點(diǎn)擊等。

示例代碼:

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("exampleId")));
// 等待元素出現(xiàn)并可見后,繼續(xù)執(zhí)行下一行代碼

通過(guò) ExpectedConditions 類提供的方法,可以等待元素的可見性、可點(diǎn)擊性、存在等不同條件。

2.隱式等待(Implicit Wait):使用 driver.manage().timeouts().implicitlyWait() 方法來(lái)設(shè)置等待的超時(shí)時(shí)間,然后在查找元素時(shí)會(huì)等待指定的時(shí)間,如果在超時(shí)時(shí)間內(nèi)找到了元素,則繼續(xù)執(zhí)行下一行代碼,否則拋出 NoSuchElementException 異常。

示例代碼:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
WebElement element = driver.findElement(By.id("exampleId"));
// 等待10秒內(nèi)找到元素,如果超時(shí)未找到則拋出異常

隱式等待適用于整個(gè)WebDriver會(huì)話的生命周期,只需要設(shè)置一次,然后在之后的查找元素中會(huì)自動(dòng)等待指定的時(shí)間。

補(bǔ)充:Selenium:三種等待方式

UI自動(dòng)化測(cè)試,大多都是通過(guò)定位頁(yè)面元素來(lái)模擬實(shí)際的生產(chǎn)場(chǎng)景操作。但在編寫自動(dòng)化測(cè)試腳本中,經(jīng)常出現(xiàn)元素定位不到的情況,究其原因,無(wú)非兩種情況:1、有frame;2、沒有設(shè)置等待。

因?yàn)榇a運(yùn)行速度和瀏覽器加載渲染速度,不是一個(gè)量級(jí),所以導(dǎo)致了這種情況發(fā)生。webdriver提供了3種類型的等待:顯式等待、隱式等待、強(qiáng)制等待。

一、顯示等待

定義:等待某個(gè)條件成立時(shí)繼續(xù)執(zhí)行,否則在達(dá)到最大時(shí)長(zhǎng)時(shí)拋出異常(TimeoutException);

WebDriverWait類是由webdriver提供的等待方法,配合該類提供的until()和until_not()方法一起使用,就可以根據(jù)判斷條件而靈活進(jìn)行等待,格式如下

  • WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
  • driver:瀏覽器驅(qū)動(dòng)
  • timeout:最長(zhǎng)超時(shí)時(shí)間
  • poll_frequency:檢測(cè)間隔時(shí)間,默認(rèn)0.5s
  • ignored_exceptions:超時(shí)后的異常信息,默認(rèn)情況拋出NoSuchElementException異常
  • WebDriverWait()一般由until()或until_not方法配合使用,下面是這兩種方法的說(shuō)明:
  • until(method,message=''):調(diào)用該方法提供的驅(qū)動(dòng)程序作為一個(gè)參數(shù),直到返回值為True;
  • until_not(method,message=''):調(diào)用該方法提供的驅(qū)動(dòng)程序作為一個(gè)參數(shù),直到返回值為Flase;

示例代碼如下:

  # coding = utf-8
  from selenium import webdriver
  from selenium.webdriver.support.wait import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC
  from selenium.webdriver.common.by import By
  driver = webdriver.Chrome("F:\安裝工具\(yùn)python\chromedriver.exe")
  driver.implicitly_wait(10)
  driver.get('http://www.cnblogs.com/imyalost/')
 locator = (By.LINK_TEXT, '老_張')
 try:
     WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
     print(driver.find_element_by_link_text('老_張').get_attribute('href'))
 finally:
     driver.close()

代碼解析:

本例中,通過(guò)as關(guān)鍵字將expected_conditions重命名為EC,并調(diào)用presence_of_element_located()方法判斷元素是否存在;

上面的例子中,同時(shí)使用了隱性等待和顯性等待,但是需要注意的是:等待的最長(zhǎng)時(shí)間取兩者之中的最大值;

expected_conditions類提供的預(yù)期條件判斷方法如下:

  • title_is: 判斷當(dāng)前頁(yè)面的title是否完全等于(==)預(yù)期字符串,返回布爾值
  • title_contains : 判斷當(dāng)前頁(yè)面的title是否包含預(yù)期字符串,返回布爾值
  • presence_of_element_located : 判斷某個(gè)元素是否被加到了dom樹里,并不代表該元素一定可見 4 visibility_of_element_located : 判斷某個(gè)元素是否可見. 可見代表元素非隱藏,并且元素的寬和高都不等于0
  • visibility_of : 跟上面的方法做一樣的事情,只是上面的方法要傳入locator,這個(gè)方法直接傳定位到的element就好了  presence_of_all_elements_located : 判斷是否至少有1個(gè)元素存在于dom樹中。舉個(gè)例子,如果頁(yè)面上有n個(gè)元素的class都是‘column-md-3‘,那么只要有1個(gè)元素存在,這個(gè)方法就返回True
  • text_to_be_present_in_element : 判斷某個(gè)元素中的text是否 包含 了預(yù)期的字符串
  • text_to_be_present_in_element_value : 判斷某個(gè)元素中的value屬性是否 包含 了預(yù)期的字符串
  • frame_to_be_available_and_switch_to_it : 判斷該frame是否可以switch進(jìn)去,如果可以的話,返回True并且switch進(jìn)去,否則返回False
  • invisibility_of_element_located : 判斷某個(gè)元素中是否不存在于dom樹或不可見
  • element_to_be_clickable : 判斷某個(gè)元素中是否可見并且是enable的,這樣的話才叫clickable
  • staleness_of : 等某個(gè)元素從dom樹中移除,注意,這個(gè)方法也是返回True或False
  • element_to_be_selected : 判斷某個(gè)元素是否被選中了,一般用在下拉列表
  • element_selection_state_to_be : 判斷某個(gè)元素的選中狀態(tài)是否符合預(yù)期
  • element_located_selection_state_to_be : 跟上面的方法作用一樣,只是上面的方法傳入定位到的element,而這個(gè)方法傳入locator
  • alert_is_present : 判斷頁(yè)面上是否存在alert

二、隱式等待

定義:通過(guò)設(shè)定的時(shí)長(zhǎng)等待頁(yè)面元素加載完成,再執(zhí)行下面的代碼,如果超過(guò)設(shè)定時(shí)間還未加載完成,則繼續(xù)執(zhí)行下面的代碼(注意:在設(shè)定時(shí)間內(nèi)加載完成則立即執(zhí)行下面的代碼);

隱式等待的方法為:implicitly_wait,示例代碼如下:

 # coding = utf-8
 from selenium import webdriver
 driver = webdriver.Chrome("F:\安裝工具\(yùn)python\chromedriver.exe")
 driver.implicitly_wait(10) # 隱性等待,最長(zhǎng)等10秒
 driver.get('http://www.cnblogs.com/imyalost/')
 print(driver.current_url)
 driver.quit()

代碼解析:

本例中,設(shè)置的等待時(shí)長(zhǎng)為10秒,但這10秒并非一個(gè)固定時(shí)間,并不影響腳本執(zhí)行速度;其次,隱式等待對(duì)整個(gè)driver的周期都起作用,因此只需要設(shè)置一次即可。

三、強(qiáng)制等待

即sleep()方法,由python中的time模塊提供,強(qiáng)制讓代碼等待xxx時(shí)間,無(wú)論前面的代碼是否執(zhí)行完成或者還未完成,都必須等待設(shè)定的時(shí)間。

示例代碼如下:

  # coding = utf-8
  from selenium import webdriver
  from time import sleep
  driver = webdriver.Chrome("F:\安裝工具\(yùn)python\chromedriver.exe")
  driver.get('http://www.cnblogs.com/imyalost/')
  sleep(5)
 print(driver.current_url)
 driver.quit()

代碼解析:

本例中,設(shè)置強(qiáng)制等待時(shí)間為5秒,5秒之后,打印獲取到的當(dāng)前頁(yè)面的url,然后關(guān)閉窗口。

這種強(qiáng)制等待的方法,在debug時(shí)候很有用,不過(guò)建議慎用這種方法,因?yàn)樘腊?,?yán)重影響程序執(zhí)行速度!

以上三種等待方法,在具體的場(chǎng)景中需要根據(jù)情況選擇合適的方法,靈活運(yùn)用。。。

到此這篇關(guān)于java使用selenium自動(dòng)化WebDriver等待的文章就介紹到這了,更多相關(guān)java selenium自動(dòng)化WebDriver等待內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java將集合List轉(zhuǎn)換成String字符串(或String轉(zhuǎn)換成List)詳解

    Java將集合List轉(zhuǎn)換成String字符串(或String轉(zhuǎn)換成List)詳解

    今天在寫項(xiàng)目的時(shí)候遇到一個(gè)問(wèn)題,就是要把得到的一個(gè)集合轉(zhuǎn)換成字符串,下面這篇文章主要給大家介紹了關(guān)于Java將集合List轉(zhuǎn)換成String字符串(或String轉(zhuǎn)換成List)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • logback-spring.xml配置詳解

    logback-spring.xml配置詳解

    這篇文章主要介紹了logback-spring.xml詳解,本文介紹了logback-spring.xml相關(guān)的知識(shí)與概念,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 你肯定能看懂的Java IO相關(guān)知識(shí)總結(jié)

    你肯定能看懂的Java IO相關(guān)知識(shí)總結(jié)

    群里有大佬說(shuō)想讓我寫一篇NIO,一直也沒寫,但是和同事聊天也說(shuō)對(duì)Java的IO不是很清晰,因此今天就寫下Java的io,先打個(gè)基礎(chǔ),下次寫NIO,需要的朋友可以參考下
    2021-05-05
  • 解決Swagger2返回map復(fù)雜結(jié)構(gòu)不能解析的問(wèn)題

    解決Swagger2返回map復(fù)雜結(jié)構(gòu)不能解析的問(wèn)題

    這篇文章主要介紹了解決Swagger2返回map復(fù)雜結(jié)構(gòu)不能解析的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    死鎖是兩個(gè)甚至多個(gè)線程被永久阻塞時(shí)的一種運(yùn)行局面,這種局面的生成伴隨著至少兩個(gè)線程和兩個(gè)或者多個(gè)資源。在這里我已寫好一個(gè)簡(jiǎn)單的程序,它將會(huì)引起死鎖方案然后我們就會(huì)明白如何分析它
    2017-06-06
  • springcloud ribbon 饑餓加載原理解析

    springcloud ribbon 饑餓加載原理解析

    這篇文章主要介紹了springcloud ribbon 饑餓加載原理解析,饑餓加載特別適用于對(duì)啟動(dòng)性能要求較高的場(chǎng)景,如系統(tǒng)啟動(dòng)初期就有高并發(fā)請(qǐng)求的情況,感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2024-04-04
  • SpringBoot結(jié)合Tess4J實(shí)現(xiàn)拍圖識(shí)字的示例代碼

    SpringBoot結(jié)合Tess4J實(shí)現(xiàn)拍圖識(shí)字的示例代碼

    圖片中的文字提取已經(jīng)越來(lái)越多地應(yīng)用于數(shù)據(jù)輸入和自動(dòng)化處理過(guò)程,本文主要介紹了SpringBoot結(jié)合Tess4J實(shí)現(xiàn)拍圖識(shí)字的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • Java消息隊(duì)列RabbitMQ入門詳解

    Java消息隊(duì)列RabbitMQ入門詳解

    這篇文章主要介紹了Java消息隊(duì)列RabbitMQ入門詳解,RabbitMQ是使用Erlang語(yǔ)言開發(fā)的開源消息隊(duì)列系統(tǒng),基于AMQP協(xié)議 來(lái)實(shí)現(xiàn),AMQP的主要特征是面向消息、隊(duì)列、路由(包括點(diǎn)對(duì)點(diǎn)和發(fā)布 /訂閱)、可靠性、安全,需要的朋友可以參考下
    2023-07-07
  • SpringBoot各種注解詳解

    SpringBoot各種注解詳解

    SpringBoot的一個(gè)核心功能是IOC,就是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用SpringBoot注解方式或者Spring XML配置方式。SpringBoot注解方式減少了配置文件內(nèi)容,更加便于管理,并且使用注解可以大大提高了開發(fā)效率
    2022-12-12
  • java String源碼和String常量池的全面解析

    java String源碼和String常量池的全面解析

    下面小編就為大家分享一篇java String源碼和String常量池的全面解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12

最新評(píng)論