GEB断言,等待

时间:2014-12-03 16:04:13

标签: intellij-idea geb

我正在使用IntelliJ学习GEB并且有两个问题。

  1. 当我点击页面顶部的按钮时,我被重定向到页面的最底部。 在此之后,我需要断言网站滑落。

    我尝试在这个例子中做断言:

    assert page.element_on_the bottom.isDisplayed() == true
    
    // element_on_the bottom {$('css_selector)
    

    即使我没有点击按钮向下滑动,上面的断言总是返回true。 我需要检查网站上是否显示元素,这实际上是显示在我的显示器屏幕上。有没有办法做到这一点?

  2. 我尝试在示例中使用waitFor语句:

    waitFor{page.element.isDisplayed()}
    

    但它不起作用:

      

    geb.waiting.WaitTimeoutException:条件未在5.0秒内通过(因异常而失败)

    而不是我使用:

    Thread.sleep(3000) //which is not desirable here 
    

    然后我的测试通过。我认为我的元素不会触发任何js或ajax脚本操作。 我不确定如何使用等待所有元素加载的waitFor。

2 个答案:

答案 0 :(得分:1)

元素不必在视图中isDisplayed()返回true - 只要元素在页面上可见,它就会返回true,例如它的display属性未设置为hidden。您需要使用javascript检测滚动位置,因为WebDriver不会显示滚动信息。有关如何检测该滚动位于页面底部的信息,请参阅this response,并参阅this section of the Book of Geb了解如何在浏览器中执行javascript代码。

您从waitFor {}电话中获得的异常及其堆栈跟踪是什么?它可能包含了实际情况的线索。

答案 1 :(得分:0)

对于您的第一个问题,请您尝试以下内容,因为显示应该可以正常工作,并且可以检查DOM中是否存在css选择器:

waitFor { page.element_on_the bottom.isDisplayed() }

waitFor { page.element_on_the bottom.displayed() }

对于第二个问题,您需要编辑Gebconfig文件,如下所示,因为您现在的等待时间是5秒,这就是为什么它失败而您的睡眠时间超过5秒:

waiting {
    timeout = 30
    retryInterval = 0.1
}

或者,你也可以在下面代码的同一行尝试:

waitFor (30, 0.1) {page.element.isDisplayed()}

如果效果不错,请告诉我们!另一方面,为什么不简单地从导入的类中编写函数名而不是总是编写className.functionName()?祝你好运,干杯!!