Unreviewed. Update W3C WebDriver imported tests.
[WebKit-https.git] / WebDriverTests / imported / w3c / webdriver / tests / support / wait.py
1 import sys
2 import time
3
4
5 class TimeoutException(Exception):
6     pass
7
8
9 def wait(session, condition, message,
10          interval=0.1, timeout=5, ignored_exceptions=Exception):
11     """ Poll a condition until it's true or the timeout ellapses.
12
13     :param session: WebDriver session to use with `condition`
14     :param condition: function that accepts a WebDriver session and returns a boolean
15     :param message: failure description to display in case the timeout is reached
16     :param interval: seconds between each call to `condition`. Default: 0.1
17     :param timeout: seconds until we stop polling. Default: 5
18     :param ignored_exceptions: Exceptions that are expected and can be ignored.
19         Default: Exception
20     """
21
22     start = time.time()
23     end = start + timeout
24
25     while not (time.time() >= end):
26         next_step = time.time() + interval
27         try:
28             success = condition(session)
29         except ignored_exceptions:
30             last_exc = sys.exc_info()[0]
31             success = False
32         next_interval = max(next_step - time.time(), 0)
33         if not success:
34             time.sleep(next_interval)
35             continue
36         return success
37
38     print "Last exception encountered was {}".format(last_exc)
39     raise TimeoutException("Timed out after %d seconds: %s" % (timeout, message))