package org.syftkog.web.test.framework;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
/**
*
* @author BenjaminLimb
* @param <T>
*/
public class PageAssertions<T extends Page> {
private final T page;
/**
*
* @param page
*/
public PageAssertions(T page) {
this.page = page;
}
/**
*
* @param <P>
* @param page
* @return
*/
public static <P extends Page> PageAssertions that(P page) {
return new PageAssertions<>(page);
}
/**
*
* @return
*/
public T correctURL() {
page.getDriver().logStep("ASSERT: Correct URL");
Assert.assertTrue(page.isCorrectPage());
return page;
}
/**
*
* @return
*/
public T loaded() {
page.getDriver().logStep("ASSERT: Page Loaded, AJAX calls are complete.");
Assert.assertTrue(page.isCorrectPage());
Assert.assertTrue(page.isLoadConditionMet());
containsNoErrorMessages();
return page;
}
/**
* TODO: This should live in a page object.
*
* @return
*/
public T containsNoErrorMessages() {
// Look for error messages
List<WebElement> els = page.getDriver().findElements(By.cssSelector(".search_error"));
if (els.size() > 0) {
for (WebElement el : els) {
if (el.isDisplayed()) {
Assert.fail(page.getDriver().getCurrentUrl() + " contained error message. Look for the css search_error class");
}
}
}
return page;
}
/**
*
* @return
*/
public T containsOnlyValidLinks() {
List<WebElement> links = page.getDriver().findElements(By.cssSelector("a"));
for (WebElement el : links) {
if (el.isDisplayed()) {
String href = el.getAttribute("href");
if (!href.contains("javascript")) {
String response = Integer.toString(GeneralUtils.getResponseCode(href));
}
}
}
return page;
}
}