2222 from crossbench import plt
2323 from crossbench .browsers .browser import Browser
2424 from crossbench .exception import ExceptionAnnotationScope
25+ from crossbench .helper .wait import WaitRange
2526 from crossbench .runner .run import Run
2627 from crossbench .runner .runner import Runner
2728 from crossbench .runner .timing import AnyTimeUnit , Timing
@@ -117,14 +118,24 @@ def js(self,
117118 def wait_js_condition (
118119 self ,
119120 js_code : str ,
120- min_wait : AnyTimeUnit ,
121+ min_interval : AnyTimeUnit ,
121122 timeout : AnyTimeUnit ,
122123 delay : AnyTimeUnit = 0 ,
123124 absolute_time : bool = False ,
124125 arguments : Sequence [object ] = (),
125126 success_condition : Callable [[Any ], bool ] = _default_success_condition
126127 ) -> None :
127- wait_range = self ._run .wait_range (min_wait , timeout , delay )
128+ """
129+ Runs the `js_code` at a regular interval until either the `timeout` is
130+ reached or the return value is true. The poll interval is exponentially
131+ increasing with the WaitRange's default factor:
132+ 1. sleep for `delay`, check `js_code`
133+ 2. sleep for `min_interval`, check `js_code`
134+ 2. sleep for `min_interval * 1.01 ** 1`, check `js_code`
135+ ...
136+ N. sleep for `min_interval * 1.01 ** N`, check `js_code`
137+ """
138+ wait_range : WaitRange = self ._run .wait_range (min_interval , timeout , delay )
128139 assert "return" in js_code , (
129140 f"Missing return statement in js-wait code: { js_code } " )
130141 for _ , _ , time_left in wait_range .wait_with_backoff ():
@@ -145,7 +156,7 @@ def wait_for_ready_state(self, ready_state: ReadyState,
145156 f"""
146157 let state = document.readyState;
147158 return state === '{ ready_state } ' || state === "complete";
148- """ , 0.2 , timeout . total_seconds () )
159+ """ , 0.2 , timeout )
149160
150161 def show_url (
151162 self ,
0 commit comments