does someone know how to wait until the page is loaded? I tried all possible variants I found on the web but is simply does not work.
I need to wait after I trigger a click() command, there is some internal scripting on the web server which fools checks such as (I exclude the code to import required modules and use standard naming conventions):
WebDriverWait(browser, 10).until(lambda d: d.find_element_by_id(the_id))
However. I typically try to retrieve a page element, catch the exception and keep on trying until a timeout is reached. I might also check that the element is visible not merely present.
There must be some DOM element whose visibility you can use to test that a page has "finished" loading. I typically have a
wait_for_element_presence functions in my test cases.
def wait_for_visibility(self, selector, timeout_seconds=10): retries = timeout_seconds while retries: try: element = self.get_via_css(selector) if element.is_displayed(): return element except (exceptions.NoSuchElementException, exceptions.StaleElementReferenceException): if retries <= 0: raise else: pass retries = retries - 1 time.sleep(pause_interval) raise exceptions.ElementNotVisibleException( "Element %s not visible despite waiting for %s seconds" % ( selector, timeout_seconds) )
get_via_css is one of my own functions but I hope it's fairly clear what it is doing.