2017-05-31 32 views
1

我們使用Geb進行自動化。我在每個頁面加載之前加載了spinner。我們使用WAITFOR(),但它需要很長的時間和腳本越來越跑得比指定time.The DOM元素更是看看div是否存在或不存在geb

<div classname="loader"></div> 

我想看看如果該元素存在。

if(!$(".loader").displayed== true) 
    {} 

但我得到錯誤的,

geb.waiting.WaitTimeoutException: condition did not pass in 40.0 seconds (failed with exception) 

at geb.waiting.Wait.waitFor(Wait.groovy:138) 
at geb.waiting.DefaultWaitingSupport.doWaitFor(DefaultWaitingSupport.groovy:51) 
at geb.waiting.DefaultWaitingSupport.waitFor(DefaultWaitingSupport.groovy:46) 
at geb.Page.waitFor(Page.groovy:516) 
at geb.Browser.methodMissing(Browser.groovy:206) 
at geb.spock.GebSpec.methodMissing(GebSpec.groovy:56) 
at loaderSpec(loaderSpec.groovy:415) 
Caused by: Assertion failed: 

$(".loader").displayed== false 
|   |  | 
    |   true  false 
    [[[ChromeDriver: chrome on XP (1b3943691dd96ebaf9098b1720c87ee9)] -> css 
selector: .loader]] 

at loaderSpec(loaderSpec.groovy:415) 
at loaderSpec(loaderSpec.groovy:415) 
at geb.waiting.Wait.waitFor(Wait.groovy:127) 
... 6 more 

我不知道如何檢查DIV存在或不存在。如果我延長等待時間,則會收到找不到元素的錯誤。

請讓我知道您的意見。

+0

請讓我知道,如果需要 – user940371

回答

1

你檢查的股利是可見的,而你正在等待微調走開? 我遇到過困擾我的問題。下面是解我的同事和我想出了:

try{ 
    waitFor(10) { element.isDisplayed() } //wait for spinner to kick in 
    waitFor() { !element.isDisplayed() } //wait for spinner to go away 
} catch(WaitTimeoutException e) { 
// if spinner loads & deloads faster than this code is reached 
// then WTE will be caught and we dont need to handle the spinner any more 

    //println(e.printStackTrace()) 
} 
+0

非常感謝。有效 – user940371

0

你可以用代碼嘗試if(!$(".loader")==undefined){}

+0

任何進一步的信息我收到未定義的錯誤。這是不接受作爲Java腳本 – user940371

1

你的布爾表達式複雜得多,它需要,在這種情況下,你可能會注意到(!)的東西你不是說要。

一般來說,你永遠不需要比較布爾值。 (bool1 == true)與說(bool1)相同。

而不是說

​​3210

只是說:

if($(".loader").displayed){} //to check if the div is displayed 

if(!$(".loader").displayed){} //to check if the div is not displayed 
+0

嗨,我試過所有的選項,直到我們有元素的if循環將工作。否則,我得到elementNotFound錯誤。讓我知道你的想法 – user940371