All Downloads are FREE. Search and download functionalities are using the official Maven repository.

core.helpers.PageHelper Maven / Gradle / Ivy

package core.helpers;

import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.interactions.Actions;

import core.support.logger.TestLog;
import core.support.objects.DriverObject;
import core.uiCore.driverProperties.capabilities.WebCapability;
import core.uiCore.drivers.AbstractDriver;
import core.uiCore.drivers.AbstractDriverJunit;
import core.uiCore.drivers.AbstractDriverTestNG;
import core.uiCore.webElement.EnhancedBy;
import core.uiCore.webElement.EnhancedWebElement;

public class PageHelper {

	/**
	 * maximizes web page
	 */
	public void maximizePage() {
		try {
			AbstractDriver.getWebDriver().manage().window().maximize();
		} catch (Exception e) {
			TestLog.logWarning("Page was not maximized");
			printStackTrace(e);
		}
	}

	/**
	 * sets page size
	 * 
	 * @param x
	 * @param y
	 */
	public void setPageSize(int x, int y) {
		Dimension dimension = new Dimension(x, y);
		AbstractDriver.getWebDriver().manage().window().setSize(dimension);
	}

	/**
	 * reload page
	 */
	public void refreshPage() {
		if(AbstractDriver.getWebDriver() == null) return;
		
		try {
			if (Helper.isWebDriver())
				AbstractDriver.getWebDriver().navigate().refresh();
			if (Helper.mobile_isMobile())
				Helper.refreshMobileApp();
		}catch(Exception e) {
			e.getMessage();
		}

		Helper.wait.waitForSeconds(1);
	}

	/**
	 * switches frame to frame specified
	 * 
	 * @param frame
	 */
	public void switchIframe(EnhancedBy frame) {
		EnhancedWebElement frameElement = Element.findElements(frame);
		AbstractDriver.getWebDriver().switchTo().defaultContent(); // you are now outside both
		// frames
		AbstractDriver.getWebDriver().switchTo().frame(frameElement.get(0));
	}

	/**
	 * switches to default frame
	 */
	public void switchToDefaultFrame() {
		AbstractDriver.getWebDriver().switchTo().defaultContent();
	}

	/**
	 * switch windows handle based on index
	 * 
	 * @param index
	 */
	public static void switchWindowHandle(int index) {
		// wait for the window handle to be available
		waitForWindowHandle(index);

		// switch window handle
		Set handles = Helper.mobile.getAppiumDriver().getWindowHandles();
		List handleList = new ArrayList<>(handles);
		Helper.mobile.getAppiumDriver().switchTo().window(handleList.get(index));
	}

	/**
	 * waits for the window handle at index to be available
	 * 
	 * @param index index of window handle
	 */
	private static void waitForWindowHandle(int index) {
		int retryWaitInSeconds = 3;
		int retry = AbstractDriver.TIMEOUT_SECONDS / retryWaitInSeconds;
		Set handles = Helper.mobile.getAppiumDriver().getWindowHandles();
		List handleList = new ArrayList<>(handles);

		while (index >= handleList.size() && retry > 0) {
			retry--;
			handles = Helper.mobile.getAppiumDriver().getWindowHandles();
			handleList = new ArrayList<>(handles);
			Helper.waitForSeconds(retryWaitInSeconds);
		}

		if (index >= handleList.size()) {
			Helper.assertFalse("window handle not available. size: " + handleList.size() + "index: " + index);
		}
	}

	/**
	 * dismisses alert by selecting ok or cancel
	 * 
	 * @param alert
	 */
	public String dimissAlert() {
		String alertText = "";
		try {
			Alert alert = AbstractDriver.getWebDriver().switchTo().alert();
			alertText = alert.getText();
			TestLog.ConsoleLog("dismissed alert");
			alert.dismiss();
		} catch (Exception e) {
			e.getMessage();
		}
		return alertText;
	}

	/**
	 * accepts alert by selecting ok or cancel
	 * 
	 * @param alert
	 */
	public String acceptAlert() {
		String alertText = "";
		try {
			Alert alert = AbstractDriver.getWebDriver().switchTo().alert();
			alertText = alert.getText();
			TestLog.ConsoleLog("accepted alert");
			alert.accept();
		} catch (Exception e) {
			e.getMessage();
		}
		return alertText;
	}

	/**
	 * returns alert message value
	 * 
	 * @return
	 */
	public String getAlertValue() {
		String alertText = "";
		try {
			Alert alert = AbstractDriver.getWebDriver().switchTo().alert();
			alertText = alert.getText();
		} catch (Exception e) {
			e.getMessage();
		}
		return alertText;
	}

	/**
	 * return the current window handle
	 * 
	 * @return
	 */
	public String currentWindow() {
		return AbstractDriver.getWebDriver().getWindowHandle();
	}

	/**
	 * switch to the new opened window
	 * 
	 * @param defaultWindow
	 */
	public void switchToNewWindow(String defaultWindow) {
		for (String winHandle : AbstractDriver.getWebDriver().getWindowHandles()) {
			if (!winHandle.equals(defaultWindow))
				AbstractDriver.getWebDriver().switchTo().window(winHandle);
		}
	}

	/**
	 * close the window And return to the defaultWindow
	 * 
	 * @param defaultWindow
	 */
	public void CloseAndReturn(String defaultWindow) {
		AbstractDriver.getWebDriver().close();
		AbstractDriver.getWebDriver().switchTo().window(defaultWindow);
	}

	/**
	 * gets page source
	 */
	public void refreshPageSource() {
		AbstractDriver.getWebDriver().getPageSource();
	}

	/**
	 * verify page title
	 * 
	 * @param appTitle
	 */
	public void verifyTitle(String appTitle) {
		Helper.assertEquals(AbstractDriver.getWebDriver().getTitle(), appTitle);
	}

	/**
	 * switch webdriver use for switching between different drivers
	 * 
	 * @param driver
	 */
	public void switchDriver(WebDriver driver) {

		if (driver.getTitle() != null || !driver.getTitle().isEmpty())
			TestLog.logPass("swtiching to " + driver.getTitle());

		if (AbstractDriver.isJunit()) {
			AbstractDriverJunit.setWebDriver(driver);
		} else if (AbstractDriver.isTestNG()) {
			AbstractDriverTestNG.setWebDriver(driver);
		}
	}

	/**
	 * switch to next tab circles back to initial tab if it reaches the last tab
	 */
	public void switchToNextTab() {
		ArrayList tabs = new ArrayList(AbstractDriver.getWebDriver().getWindowHandles());
		int currentIndex = tabs.indexOf(AbstractDriver.getWebDriver().getWindowHandle());

		// circle back to the first tab
		if (currentIndex == (tabs.size() - 1))
			currentIndex = -1;

		try {
			AbstractDriver.getWebDriver().switchTo().window(tabs.get(currentIndex + 1));
		} catch (Exception e) {
			Helper.assertFalse("tab does not exist");
		}
	}

	/**
	 * switch to previous tab circle back to the last tab
	 */
	public void switchToPreviousTab() {
		ArrayList tabs = new ArrayList(AbstractDriver.getWebDriver().getWindowHandles());
		int currentIndex = tabs.indexOf(AbstractDriver.getWebDriver().getWindowHandle());

		// circle back to last index
		if (currentIndex == 0)
			currentIndex = tabs.size();

		try {
			AbstractDriver.getWebDriver().switchTo().window(tabs.get(currentIndex - 1));
		} catch (Exception e) {
			Helper.assertFalse("tab does not exist");
		}
	}

	/**
	 * switch to tab by index
	 */
	public void switchToTab(int index) {
		ArrayList tabs = new ArrayList(AbstractDriver.getWebDriver().getWindowHandles());

		try {
			AbstractDriver.getWebDriver().switchTo().window(tabs.get(index));
		} catch (Exception e) {
			Helper.assertFalse("tab does not exist");
		}
	}

	/**
	 * switch to tab by index
	 */
	public void verifyNumberOfTabs(int tabs) {
		ArrayList tabCount = new ArrayList(AbstractDriver.getWebDriver().getWindowHandles());
		Helper.assertEquals(tabs, tabCount.size());
	}

	/**
	 * returns the title of the page
	 * 
	 * @return
	 */
	public String getPageTitle() {
		if(AbstractDriver.getWebDriver() == null) return StringUtils.EMPTY;
		try {
			return AbstractDriver.getWebDriver().getTitle();
		}catch(Exception e) {
			printStackTrace(e);
		}
		return StringUtils.EMPTY;
	}

	/**
	 * returns the current url
	 * 
	 * @return
	 */
	public String getCurrentUrl() {
		if(AbstractDriver.getWebDriver() == null) return StringUtils.EMPTY;
		try {
			return AbstractDriver.getWebDriver().getCurrentUrl();
		}catch(Exception e) {
			printStackTrace(e);
		}
		return StringUtils.EMPTY;
	}

	/**
	 * gets page source
	 * 
	 * @return
	 */
	public String getPageSource() {
		if(AbstractDriver.getWebDriver() == null) return StringUtils.EMPTY;
		return AbstractDriver.getWebDriver().getPageSource().toString();
	}

	/**
	 * navigates back
	 */
	public void navigateBack() {
		if(AbstractDriver.getWebDriver() == null) return;
		AbstractDriver.getWebDriver().navigate().back();
	}

	/**
	 * navigate forward
	 */
	public void navigateForward() {
		if(AbstractDriver.getWebDriver() == null) return;
		AbstractDriver.getWebDriver().navigate().forward();
	}

	/**
	 * delete all cookies
	 */
	public void deleteAllCookies() {
		if(AbstractDriver.getWebDriver() == null) return;
		AbstractDriver.getWebDriver().manage().deleteAllCookies();
	}

	/**
	 * delete cookie named
	 * 
	 * @param name
	 */
	public void deleteCookieNamed(String name) {
		if(AbstractDriver.getWebDriver() == null) return;
		AbstractDriver.getWebDriver().manage().deleteCookieNamed(name);
	}

	/**
	 * brings current browser to front
	 * webdriver only
	 */
	public void bringPageToFront() {
		if(AbstractDriver.getWebDriver() == null) return;
		if(!Helper.isWebDriver()) return;
		
		try {
			String currentWindowHandle = AbstractDriver.getWebDriver().getWindowHandle();
			AbstractDriver.getWebDriver().switchTo().window(currentWindowHandle);
		} catch (Exception e) {
			e.getMessage();
		}
	}

	/**
	 * navigate to a different url
	 * 
	 * @param url destination url
	 */
	public void swtichUrl(String url) {
		navigateToUrl(url);
	}

	/**
	 * navigate to a different url
	 * 
	 * @param url destination url
	 */
	public void navigateToUrl(String url) {
		if(AbstractDriver.getWebDriver() == null) return;
		
		int retry = 3;
		boolean success = false;
		do {
			retry--;
			try {
				AbstractDriver.getWebDriver().get(url);
				success = true;
			}catch(Exception e) {
		    	Helper.page.printStackTrace(e);
				TestLog.ConsoleLog("get url failed, retrying: " + url);
			}
			
			retry--;
		}while(!success && retry >= 0);
	}

	/**
	 * retrieves the clip board data
	 * 
	 * @return
	 */
	public String getClipboardData() {
		String myText = "";
		try {
			myText = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
		} catch (Exception e) {
			e.getMessage();
		}
		return myText;
	}

	/**
	 * quits the current web driver
	 */
	public void quitCurrentDriver() {
		DriverObject.quitWebDriver(AbstractDriver.getWebDriver());
	}

	/**
	 * quit driver
	 * 
	 * @param driver
	 */
	public void quitDriver(WebDriver driver) {
		DriverObject.quitWebDriver(driver);
	}

	/**
	 * quits all drivers in the current test
	 */
	public void quitAllCurrentTestDrivers() {
		DriverObject.quitTestDrivers();
	}

	/**
	 * returns true if the element is visible in the current page only for web
	 * applications
	 * 
	 * @param by
	 * @return
	 */
	public Boolean isVisibleInViewport(EnhancedBy by) {
		return isVisibleInViewport(by, 0);
	}

	/**
	 * returns true if the element is visible in the current page only for web
	 * applications
	 * 
	 * @param by
	 * @return
	 */
    public Boolean isVisibleInViewport(EnhancedBy by, int index) {
  	  if(!Helper.isWebDriver()) return false;
  	  Boolean isVisible = false;
		  EnhancedWebElement targetElement = Element.findElements(by);
		  
		  try {
			  isVisible = (Boolean)((JavascriptExecutor) AbstractDriver.getWebDriver()).executeScript(
		    	      "var elem = arguments[0],                 " +
		    	    	      "  box = elem.getBoundingClientRect(),    " +
		    	    	      "  cx = box.left + box.width / 2,         " +
		    	    	      "  cy = box.top + box.height / 2,         " +
		    	    	      "  e = document.elementFromPoint(cx, cy); " +
		    	    	      "for (; e; e = e.parentElement) {         " +
		    	    	      "  if (e === elem)                        " +
		    	    	      "    return true;                         " +
		    	    	      "}                                        " +
		    	    	      "return false;                            "
		    	    	      , targetElement.get(index, false));
		  }catch(StaleElementReferenceException st) {
			  st.getMessage();
		  }catch(Exception e) {
			  e.getMessage();
		  }
		  
  	  return isVisible;
  }
  
	/**
	 * get current webdriver
	 * @return
	 */
	public WebDriver getWebdriver() {
	    return AbstractDriver.getWebDriver();
	}
	
	/**
	 * prints stack trace
	 * @param trace
	 */
	public void printStackTrace(Throwable throwable) {
    	TestLog.ConsoleLogNoLimit("stack trace: " + Helper.stringNormalize(ExceptionUtils.getStackTrace(throwable)), false);

	}/**
	 * scroll to bottom of browser
	 */
	public void scrollBottomPageBrowser() {
		// only for web browser
		if(!Helper.isWebDriver()) return;
		
		Actions action = new Actions(AbstractDriver.getWebDriver());
		action.sendKeys(Keys.END).build().perform();
		Helper.waitForSeconds(0.5);
	}
	
	
	/**
	 * scroll up browser
	 */
	public void scrollUpBrowser(int count) {
		
		// only for web browser
		if(!Helper.isWebDriver()) return;
		
		Actions action = new Actions(AbstractDriver.getWebDriver());
		
		for(int i=0; i 0);
	}
	
	/**
	 * scroll to element
	 * @param element
	 * @param index
	 */
	public void scrollToWebElement(EnhancedBy element, int index) {
		// only for web browser
		if(!Helper.isWebDriver()) return;
		
		EnhancedWebElement targetElement = Element.findElements(element);
		targetElement.scrollToView(index);
		Helper.waitForSeconds(0.5);
	}
	
	public boolean isFirefox() {
		return WebCapability.isFirefox();
	}
	
	public boolean isChrome() {
		return WebCapability.isChrome();
	}
	
	public boolean isSafari() {
		return WebCapability.isSafari();
	}
	
	public boolean isMicrosoftEdge() {
		return WebCapability.isMicrosoftEdge();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy