package in.mayurshah.base;
import in.mayurshah.util.Log;
import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
public class BasePageObjects {
protected static String getElementText(Log log, WebDriver driver, By by) {
return getElementText(log, driver.findElement(by));
}
protected static String getElementText(Log log, WebElement element) {
return element.getText();
}
protected static String getTextboxText(Log log, WebDriver driver, By by) {
return getTextboxText(log, driver.findElement(by));
}
protected static String getTextboxText(Log log, WebElement element) {
return element.getAttribute("value");
}
protected static void selectInput(Log log, WebDriver driver, By by,
String value) {
selectInput(log, driver.findElement(by), value);
}
protected static void selectInput(Log log, WebElement element, String value) {
Select select = new Select(element);
select.selectByVisibleText(value);
}
protected static void enterValueIntoTextBox(Log log, WebDriver driver,
By by, String str, boolean clear) {
enterValueIntoTextBox(log, driver.findElement(by), str, clear);
}
protected static void enterValueIntoTextBox(Log log, WebElement element,
String str, boolean clear) {
if (clear)
element.clear();
element.sendKeys(str);
}
protected static void clickElement(Log log, WebDriver driver, By by) {
clickElement(log, driver, driver.findElement(by));
}
protected static void clickElement(Log log, WebDriver driver,
WebElement element) {
waitForClickable(log, driver, element, 5);
element.click();
}
protected static void waitForFrame(Log log, WebDriver driver, By by,
int duration) {
try {
new WebDriverWait(driver, duration).until(ExpectedConditions
.frameToBeAvailableAndSwitchToIt(by));
} catch (StaleElementReferenceException e) {
e.printStackTrace();
}
}
protected static void containsText(Log log, WebDriver driver, By by,
String str, boolean caseSensitive) {
containsText(log, driver.findElement(by), str, caseSensitive);
}
protected static void containsText(Log log, WebElement element, String str,
boolean caseSensitive) {
log.write("Checking string " + str + " in " + element.getText());
if (caseSensitive)
Assert.assertTrue(element.getText().contains(str));
else
Assert.assertTrue(element.getText().toLowerCase()
.contains(str.toLowerCase()));
}
protected static void assertText(Log log, WebDriver driver, By by,
String str, boolean caseSensitive) {
assertText(log, driver.findElement(by), str, caseSensitive);
}
protected static void assertText(Log log, WebElement element, String str,
boolean caseSensitive) {
if (caseSensitive)
Assert.assertEquals(element.getText().trim(), str.trim());
else
Assert.assertEquals(element.getText().toLowerCase().trim(), str
.toLowerCase().trim());
}
protected static void assertExists(Log log, WebDriver driver, By by) {
assertExists(log, driver, driver.findElement(by));
}
protected static void assertExists(Log log, WebDriver driver,
WebElement element) {
waitForElementVisible(log, driver, element, 10);
Assert.assertTrue(element.isDisplayed());
}
protected static void mouseOver(Log log, WebDriver driver, By by) {
mouseOver(log, new Actions(driver), driver.findElement(by));
}
protected static void mouseOver(Log log, Actions actions, WebElement element) {
actions.moveToElement(element).perform();
}
/**
* Function to explicitly wait for an element to be clickable
*
* @param log -To log steps.
*
* @param driver
* -WebDriver currently in use by script
* @param by
* -By identifying the element to be interacted with
* @param duration
* -Int identifying the wait time in seconds
*/
protected static void waitForClickable(Log log, WebDriver driver, By by,
int duration) {
for (int x = 0; x <= 5; x++) {
try {
new WebDriverWait(driver, duration).until(ExpectedConditions
.elementToBeClickable(by));
break;
} catch (StaleElementReferenceException e) {
e.printStackTrace();
}
}
}
protected static void waitForClickable(Log log, WebDriver driver,
WebElement element, int duration) {
for (int x = 0; x <= 5; x++) {
try {
new WebDriverWait(driver, duration).until(ExpectedConditions
.elementToBeClickable(element));
break;
} catch (StaleElementReferenceException e) {
e.printStackTrace();
}
}
}
protected static void waitForElementVisible(Log log, WebDriver driver,
By by, int duration) {
for (int x = 0; x <= 5; x++) {
try {
new WebDriverWait(driver, duration).until(ExpectedConditions
.visibilityOfElementLocated(by));
break;
} catch (StaleElementReferenceException e) {
e.printStackTrace();
}
}
}
protected static void waitForElementVisible(Log log, WebDriver driver,
WebElement element, int duration) {
for (int x = 0; x <= 5; x++) {
try {
new WebDriverWait(driver, duration).until(ExpectedConditions
.visibilityOf(element));
break;
} catch (StaleElementReferenceException e) {
e.printStackTrace();
}
}
}
}