gpt4 book ai didi

user-interface - Geb 测试经常失败并出现 WaitTimeoutException : condition did not pass in 99. 0 秒

转载 作者:行者123 更新时间:2023-12-02 18:13:55 25 4
gpt4 key购买 nike

我们的应用程序有一些不稳定的测试,有时会成功通过,有时会在页面加载期间因 WaitTimeoutException 失败。我发现我们正在使用 waitFor(time)sleep(time) 等方法。它们之间有什么区别,哪一个更好用?或者有一些更好的解决方案来解决这个问题?

最佳答案

很多场景都需要在geb中等待。等待页面加载最好在使用页面模式时完成,您可以在页面中定义 at 检查器,例如:

static at = { waitFor { $('form').@id == "loginForm"} }

当使用此功能时,geb 将等待,直到 at 检查器可以验证页面已加载。等待直到geb配置中设置的超时。这突出了它的工作原理。在任何脚本上,您可以在任何条件下使用自己的 waitFor 调用。我提供的链接将向您展示这是如何工作的。在 geb 的更高版本中,您可以将每个 at 调用设置为显式包装在 waitFor 中。

static at = { $('form').@id == "loginForm" }

另外回答您的问题: sleep 只能作为最后的手段,因为整个线程都处于 sleep 状态,并且可能会破坏您的等待设置。当您这样做时,您会失去对加载和等待脚本的控制感。如果您无法使用带有等待条件的 waitFor 闭包将测试配置为工作,那么也许您应该考虑使页面更快。我们使用60秒只是因为环境问题。

在我看来,WaitFor(time) 有点多余,除非您实际上正在测试时间本身。

在geb中,最好针对页面内容进行操作,而不是使用可能超出您控制范围的条件。

Geb Waiting manual

Geb 配置:

    waiting {
timeout = 30
retryInterval = 1.0
}

Ajax:WAITING ajax 调用完成。它会首先休眠,因为大多数调用都在此时完成,然后它将检查事件的 ajax 调用,并在完成后休眠更多,以便为页面提供渲染时间。某些动态页面更改需要比其他页面更长的时间,因此可以修改 sleep 后的内容以适合您的网站或完全删除。

    /**
* Wait for all AJAX requests to finish.
*/
void waitForAjax(time=350) {
sleep(time)
if (!js.exec("return $.active > 0;")) {
sleep(time) // You may require more wait time here depending on action
return
}

waitForAjax(time)
}

关于user-interface - Geb 测试经常失败并出现 WaitTimeoutException : condition did not pass in 99. 0 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25135533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com