def isOpen(self, suppressLog=False): """ Check if page is loaded and visible by verifying if its unique components ('token') are present and visible on page. Can be overwritten in sub-classes for better page recognition by inspecting multiple page-specific components. """ if hasattr(self, 'token'): if not isinstance(self.token, list): tokens = [self.token] else: tokens = self.token isOpen = True for token in tokens: if not (token.isPresent() and token.isVisible()): isOpen = False break else: raise PageException(message=('%s: Page token is not defined.' % self.name), driver=self.driver, screenshotName=self.name + '.isOpen') if not suppressLog: LOG.l4('%s.isOpen(): %s' % (self.name, isOpen)) return isOpen
def submit(self): """ Submit dialog by clicking on button 'OK'. """ self.activePage.btnOK.waitUntilEnabled() self.activePage.btnOK.click() self.activePage.waitUntilClosed() LOG.l4('%s.submit()' % self.name)
def open(self, wait=True): """ Open web page in browser. """ LOG.l4("%s.open(): URL='%s'" % (self.name, self.url)) self.webDriver.get(self.url) if wait: try: self.waitUntilOpen() except PageException: pass if self.validateLayout: self.doValidation() LOG.l4("%s.open(): Done." % self.name)
def takeScreenshot(self, name): """ Save screenshot of active web page to PNG file. @param name: Name of screenshot file. """ if LOG.getLogDir() is not None: logDirectory = LOG.getLogDir() else: logDirectory = os.getcwd() pathFileName = os.path.join( logDirectory, name + '.' + express.getUnixTime(formatstr='%Y%m%d_%H%M%S') + '.png') self.webDriver.save_screenshot(pathFileName) LOG.l4("Mangal.Driver: takeScreenshot(): Saved into '%s'" % pathFileName)
def waitUntilLoaded(self): """ Generic solution, may not be the best in any case. More robust approach is to verify presence/readiness of an element belonging to particular page. """ try: WebDriverWait( driver=self.webDriver, timeout=self.driver.timeout).until( lambda _: self.webDriver.execute_script( script='return document.readyState') == 'complete') except TimeoutException: raise PageException(message="%s.waitUntilLoaded: Time out." % self.name, driver=self.driver, screenshotName=self.name + '.waitUntilLoaded') LOG.l4('%s.waitUntilLoaded()' % self.name)
def cancel(self): """ Cancel dialog by clicking on button 'Cancel'. Can be overwritten in sub-class. """ if hasattr(self.activePage, 'cancel') and callable( self.activePage.cancel): self.activePage.cancel() self.activePage.waitUntilClosed() self.activePageNumber = -1 self.activePage = None elif hasattr(self.activePage, 'btnCancel'): self.activePage.btnCancel.waitUntilEnabled() self.activePage.btnCancel.click() # Wait for page to be closed self.activePage.waitUntilClosed() self.activePageNumber = -1 self.activePage = None else: raise PageException( message='%s.%s.cancel(): Page cannot be canceled.' % (self.name, self.activePage.name), screenshotName=self.name + '.cancel') LOG.l4('%s.cancel()' % self.name)
def quit(self): LOG.l4('Quitting WebDriver') try: self.webDriver.quit() except WebDriverException, e: LOG.l4('WebDriver.quit():', e.msg)
def close(self): LOG.l4('Closing browser active window') try: self.webDriver.close() except WebDriverException, e: LOG.l4('WebDriver.close():', e.msg)
def back(self): LOG.l4('Navigating back in browser history') self.webDriver.back()
def forward(self): LOG.l4('Navigating forward in browser history') self.webDriver.forward()
def reload(self): self.webDriver.refresh() LOG.l4("%s.reload(): url='%s'" % (self.name, self.url))