You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When calling Browser.pause() it always errors immediately with geb.waiting.WaitTimeoutException: condition did not pass in 2147483647 seconds (failed with exception).
Diagnosis
I suspect this was broken by 19f9edc11a9a33bcb6f887e555db4eec59d84051 when the double Wait#toMilliseconds(Number) was converted to return an int. The pause code calls waitFor with Integer.MAX_VALUE, so the conversion to milliseconds overflows.
Suggested Fix
Option 1
Update toMilliseconds to return a long. This is more robust and safer, but more invasive.
Option 2
Update pause to use a value less than the MAX_VALUE / 1000.
Additional Info
Testing
It looks like the test coverage for the pause method - covered in PauseSpec.groovy - does not catch the error because the pause method is called in a separate thread
Stacktrace
Below is my full stacktrace (redacted company info, sorry):
geb.waiting.WaitTimeoutException: condition did not pass in 2147483647 seconds (failed with exception)
at geb.waiting.Wait.waitFor(Wait.groovy:124)
at geb.waiting.DefaultWaitingSupport.doWaitFor(DefaultWaitingSupport.groovy:50)
at geb.waiting.DefaultWaitingSupport.waitFor(DefaultWaitingSupport.groovy:41)
at geb.Page.waitFor(Page.groovy:115)
at geb.Browser.methodMissing(Browser.groovy:250)
at geb.Browser.pause(Browser.groovy:922)
at geb.spock.GebSpec.methodMissing(GebSpec.groovy:60)
<at spec method call>
Caused by:
Assertion failed:
js.'geb.unpause'
| |
| false
geb.js.JavascriptInterface@5ef87d55
at geb.Browser.pause_closure5(Browser.groovy:923)
at geb.Browser.pause_closure5(Browser.groovy)
at geb.waiting.Wait.waitFor(Wait.groovy:103)
... 7 more
Versions
Geb: v3.1
Gradle 4.7
Groovy: 2.4.12
Ant: Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM: 1.8.0_144 (Azul Systems, Inc. 25.144-b01)
OS: Mac OS X 10.15.1 x86_64
The text was updated successfully, but these errors were encountered:
Thanks for a high quality bug report, @dforegger. I'm impressed that you made the effort to figure out what the problems are with both production and test code which lead to the issue itself and then allow it slip past the verification. It's highly appreciated and made fixing the test and the issue a breeze.
Overview
When calling
Browser.pause()
it always errors immediately withgeb.waiting.WaitTimeoutException: condition did not pass in 2147483647 seconds (failed with exception).
Diagnosis
I suspect this was broken by 19f9edc11a9a33bcb6f887e555db4eec59d84051 when the
double Wait#toMilliseconds(Number)
was converted to return anint
. The pause code callswaitFor
withInteger.MAX_VALUE
, so the conversion to milliseconds overflows.Suggested Fix
Option 1
Update
toMilliseconds
to return along
. This is more robust and safer, but more invasive.Option 2
Update
pause
to use a value less than theMAX_VALUE / 1000
.Additional Info
Testing
It looks like the test coverage for the pause method - covered in PauseSpec.groovy - does not catch the error because the pause method is called in a separate thread
Stacktrace
Below is my full stacktrace (redacted company info, sorry):
Versions
Geb: v3.1
Gradle 4.7
Groovy: 2.4.12
Ant: Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM: 1.8.0_144 (Azul Systems, Inc. 25.144-b01)
OS: Mac OS X 10.15.1 x86_64
The text was updated successfully, but these errors were encountered: