diff --git a/AngularJSLibrary/__init__.py b/AngularJSLibrary/__init__.py index b99fd7e..4f2cf4f 100644 --- a/AngularJSLibrary/__init__.py +++ b/AngularJSLibrary/__init__.py @@ -86,14 +86,14 @@ def is_boolean(item): return isinstance(item,bool) class ngElementFinder(ElementFinder): - def __init__(self, root_selector, ignore_implicit_angular_wait=False): + def __init__(self, root_selector, implicit_angular_wait, ignore_implicit_angular_wait=False): super(ngElementFinder, self).__init__() self.root_selector = root_selector + self._implicit_angular_wait_in_secs = implicit_angular_wait self.ignore_implicit_angular_wait = ignore_implicit_angular_wait def find(self, browser, locator, tag=None): - timeout = self._s2l.get_selenium_timeout() - timeout = timestr_to_secs(timeout) + timeout = self._implicit_angular_wait_in_secs if not self.ignore_implicit_angular_wait: try: @@ -172,7 +172,9 @@ def __init__(self, self.root_selector = '[ng-app]' else: self.root_selector = root_selector - + + self._implicit_angular_wait_in_secs = timestr_to_secs(implicit_angular_wait) + # Override default locators to include binding {{ }} self._s2l._element_finder = ngElementFinder(self.root_selector, ignore_implicit_angular_wait) @@ -191,13 +193,16 @@ def __init__(self, def wait_for_angular(self, timeout=None, error=None): # Determine timeout and error - timeout = timeout or self._s2l.get_selenium_timeout() - timeout = timestr_to_secs(timeout) + if timeout: + timeoutSecs = timestr_to_secs(timeout) + else: + timeoutSecs = self._implicit_angular_wait_in_secs + error = error or ('Timed out waiting for Protractor to synchronize with ' + 'the page after specified timeout.') try: - WebDriverWait(self._s2l._current_browser(), timeout, 0.2)\ + WebDriverWait(self._s2l._current_browser(), timeoutSecs, 0.2)\ .until_not(lambda x: self._s2l._current_browser().execute_script(js_wait_for_angular, self.root_selector)) except TimeoutException: pass @@ -206,7 +211,7 @@ def wait_for_angular(self, timeout=None, error=None): # logger.debug(timeouts) #pendingHttps = self._exec_js(js_get_pending_http_requests) #logger.debug(pendingHttps) - #raise TimeoutException(error) + raise TimeoutException(error) def set_ignore_implicit_angular_wait(self, ignore): if not is_boolean(ignore): @@ -215,6 +220,15 @@ def set_ignore_implicit_angular_wait(self, ignore): self._s2l._element_finder.ignore_implicit_angular_wait = ignore + def get_implicit_angular_wait(self): + return robot.utils.secs_to_timestr(self._implicit_angular_wait_in_secs) + + def set_implicit_angular_wait(self, seconds): + old_wait = self.get_implicit_angular_wait() + self._implicit_angular_wait_in_secs = robot.utils.timestr_to_secs(seconds) + self._s2l._element_finder._implicit_angular_wait_in_secs = self._implicit_angular_wait_in_secs + return old_wait + # Locators def _find_by_binding(self, browser, criteria, tag, constrains): @@ -265,7 +279,7 @@ def _find_by_ng_repeater(self, browser, criteria, tag, constraints): # Helper Methods def _exec_js(self, code): - return self._s2l._current_browser().execute_script(code) + return self._s2l._current_browser().execute_script(code) def _parse_ng_repeat_locator(self, criteria): def _startswith(str,sep):