看看div是否存在于geb中

时间:2017-05-31 10:02:42

标签: selenium geb

我们正在使用Geb进行自动化。我在每个页面加载之前加载了微调器。我们正在使用waitFor(),但是它需要很长时间才能运行超过指定时间的脚本.DOM元素是

   <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是否存在。如果我延长等待的时间,我得到元素未找到错误。

请让我知道你的意见。

3 个答案:

答案 0 :(得分:1)

你的布尔表达式比它需要的更复杂,在这种情况下你可能会注意到(!)你不想要的东西。

一般来说,你永远不需要比较布尔值。 (bool1 == true)与说(bool1)相同。

而不是说

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

只是说:

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

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

答案 1 :(得分:1)

在等待微调器消失时,您是否检查div是否可见? 我有一个困扰我的问题。这是我的同事和我提出的解决方案:

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())
}

答案 2 :(得分:0)

您可以尝试使用代码if(!$(".loader")==undefined){}