小编And*_*Doe的帖子

Geb的一般问题(StaleElementReferenceException和Wait Timeouts)

根据"Book of Geb",我开始绘制门户网站的网页.我更喜欢使用静态内容闭包块中定义的变量,然后在页面方法中访问它们:

static content = {
    buttonSend { $("input", type: "submit", nicetitle: "Senden") }
}
def sendLetter() {
    waitFor { buttonSend.isDisplayed() }
    buttonSend.click()
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,有时候我会得到Geb等待超时异常(60秒后),甚至更糟糕的是我收到了众所周知的"StaleElementReferenceException".

使用"isEnabled"代替"isDisplayed"时可以避免等待超时,但对于"StaleElementReferenceException",我只能应用以下解决方案:

def sendLetter() {
    waitFor { buttonSend.isEnabled() }
    try {
        buttonSend.click()
    } catch (StaleElementReferenceException e) {
        log.info(e.getMessage())
        buttonSend.click()
    }
}
Run Code Online (Sandbox Code Playgroud)

我想,这个解决方案并不是很好,但我无法应用另一篇文章中描述的明确等待.因此,我有一些一般性的问题:

  • 当页面是动态的时候,我应该避免使用静态内容定义吗?
  • 在什么时间或事件Geb刷新它的DOM?如何触发DOM刷新?
  • 为什么在使用CSS选择器时仍然会出现"StaleElementReferenceException"?

我希望每一个有助于理解或解决这个问题的提示.最好的方法是拥有一个简单的代码示例,因为我还是初学者.谢谢!

groovy exception-handling staleobjectstate geb

3
推荐指数
1
解决办法
6626
查看次数