我正在使用IntelliJ学习GEB并且有两个问题。
当我点击页面顶部的按钮时,我被重定向到页面的最底部。 在此之后,我需要断言网站滑落。
我尝试在这个例子中做断言:
assert page.element_on_the bottom.isDisplayed() == true
// element_on_the bottom {$('css_selector)
即使我没有点击按钮向下滑动,上面的断言总是返回true。 我需要检查网站上是否显示元素,这实际上是显示在我的显示器屏幕上。有没有办法做到这一点?
我尝试在示例中使用waitFor语句:
waitFor{page.element.isDisplayed()}
但它不起作用:
geb.waiting.WaitTimeoutException:条件未在5.0秒内通过(因异常而失败)
而不是我使用:
Thread.sleep(3000) //which is not desirable here
然后我的测试通过。我认为我的元素不会触发任何js或ajax脚本操作。 我不确定如何使用等待所有元素加载的waitFor。
答案 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()?祝你好运,干杯!!