【轉(zhuǎn)】Selenium中的幾種等待方式,需特別注意implicitlyWait的

最近在項(xiàng)目過(guò)程中使用selenium 判斷元素是否存在的時(shí)候 遇到一個(gè)很坑爹的問(wèn)題, 用以下方法執(zhí)行的時(shí)候每次都會(huì)等待很長(zhǎng)一段時(shí)間绪撵,原因是因?yàn)閷?duì)selenium實(shí)現(xiàn)方法了解不足導(dǎo)致一直找不到解決方法。

privateboolean isElementPresent(By by) {

? ? try {

? ? ? driver.findElement(by);

? ? ? returntrue;

? ? } catch (NoSuchElementException e) {

? ? ? returnfalse;

? ? }

}

不明所以祝蝠,

經(jīng)過(guò)追蹤源碼才發(fā)現(xiàn)啟動(dòng)Driver的時(shí)候?使用driver.manage().timeouts().implicitlyWait(30,

TimeUnit.SECONDS); 此處設(shè)置的等待時(shí)間 是針對(duì)全局設(shè)置的音诈,webdriver中執(zhí)行所有命令 的超時(shí)時(shí)間都設(shè)置為30秒了,

如上面的findElement方法绎狭,找不到元素會(huì)默認(rèn)等待三十秒细溅。? 有些時(shí)候只需簡(jiǎn)單判斷元素是否存在,立馬執(zhí)行儡嘶,而此處的設(shè)置導(dǎo)致

腳本執(zhí)行緩慢喇聊。? 將Selenium中的等待時(shí)間貼出來(lái)給大家張張經(jīng)驗(yàn)。

Selenium的延遲等待分為 顯式等待(Explicit Wait) & 隱式等待(Implicit Wait).

1.顯式等待

顯式等待,就是明確的要等到某個(gè)元素的出現(xiàn)或者是某個(gè)元素的可點(diǎn)擊等條件,等不到,就一直等,除非在規(guī)定的時(shí)間之內(nèi)都沒(méi)找到,那么就跳出Exception.如:

newWebDriverWait(driver,15).until(? ? ? ?

? ? ? ? ? ? ? ? ? ExpectedConditions.presenceOfElementLocated(By.cssSelector("css locator")));

這里,15是要等待的秒數(shù).如果沒(méi)有滿足until()方法中的條件,就會(huì)始終在這里wait 15秒,依然找不到,就拋出異常.

也可以這樣寫:

WebDriver driver =new FirefoxDriver();

? ? driver.get(www.baidu.com);

? ? WebElement e = (newWebDriverWait( driver,10)) .until(

? ? ? ? newExpectedCondition< WebElement>(){

? ? ? ? ? ? @Override

? ? ? ? ? ? public WebElement apply( WebDriver d) {

? ? ? ? ? ? ? ? returndriver.findElement( By.id("id locator"));

? ? ? ? ? ? }

? ? ? ? }

這樣就通過(guò)回調(diào)函數(shù),直接獲得了這個(gè)WebElement.也就是頁(yè)面元素.

如果只是僅僅想判斷頁(yè)面是不是加載到某個(gè)地方了,就可以用第一種方法; 但如果需要得到某個(gè)WebElement,兩種方式都可以,只是第一種方式還需要再多一步獲取的操作.

Wait w =newWait(){

? ? ? ? @Override

? ? ? ? publicbooleanuntil() {

? ? ? ? ? ? returnwebElement.isDisplayed();

? ? ? ? }

另外這種等待的方式,在加載js代碼的時(shí)候做判斷會(huì)比較方便,反正我只在代碼里這么見(jiàn)過(guò),但是沒(méi)用過(guò),有興趣的朋友可以研究一下.

2.隱式等待

driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);

隱式等待, 此處的隱式等待是針對(duì)Driver 每次執(zhí)行命令的 最長(zhǎng)執(zhí)行時(shí)間也可以理解為超時(shí)時(shí)間蹦狂,?

一些人對(duì)此處有誤解誓篱,認(rèn)為是讓Driver等一段時(shí)間,? 確實(shí)某些時(shí)候能讓Driver等一段時(shí)間凯楔, 但是影響是全局的窜骄,每次Driver執(zhí)行

找不到元素都會(huì)等待此處設(shè)置的時(shí)間,?

假設(shè)某處將此值設(shè)置的太長(zhǎng)摆屯,必須在執(zhí)行完成之后還原回來(lái)邻遏,否則判斷一個(gè)元素是否存在的時(shí)候,就會(huì)遇到很坑爹的問(wèn)題虐骑。?? 改進(jìn)后的方法如下:

WebDriver會(huì)進(jìn)行一個(gè)隱式等待,但參數(shù)只有時(shí)間,這就導(dǎo)致我需要什么元素出現(xiàn),我不一定能等到它,

privateboolean isElementPresent(By by) {

? ? try {

? ? ? driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);

? ? ? driver.findElement(by);

? ? ? returntrue;

? ? } catch (NoSuchElementException e) {

? ? ? returnfalse;

? ? }

? }

得不到某個(gè)元素,我們就延遲一下...

3.線程休眠

Thread.sleep()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末准验,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子廷没,更是在濱河造成了極大的恐慌糊饱,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颠黎,死亡現(xiàn)場(chǎng)離奇詭異另锋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)盏缤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門砰蠢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蓖扑,“玉大人唉铜,你說(shuō)我怎么就攤上這事÷筛埽” “怎么了潭流?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵竞惋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我灰嫉,道長(zhǎng)拆宛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任讼撒,我火速辦了婚禮浑厚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘根盒。我一直安慰自己钳幅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布炎滞。 她就那樣靜靜地躺著敢艰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪册赛。 梳的紋絲不亂的頭發(fā)上钠导,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音森瘪,去河邊找鬼牡属。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柜砾,可吹牛的內(nèi)容都是我干的湃望。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼痰驱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼证芭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起担映,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤废士,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蝇完,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體官硝,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年短蜕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氢架。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朋魔,死狀恐怖岖研,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤孙援,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布害淤,位于F島的核電站,受9級(jí)特大地震影響拓售,放射性物質(zhì)發(fā)生泄漏窥摄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一础淤、第九天 我趴在偏房一處隱蔽的房頂上張望崭放。 院中可真熱鬧,春花似錦鸽凶、人聲如沸莹菱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)道伟。三九已至,卻和暖如春使碾,著一層夾襖步出監(jiān)牢的瞬間蜜徽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工票摇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拘鞋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓矢门,卻偏偏與公主長(zhǎng)得像盆色,于是被迫代替她去往敵國(guó)和親少办。 傳聞我的和親對(duì)象是個(gè)殘疾皇子振亮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容