package ru.stqa.trainings.testng.simple4.sample17;
import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.testng.asserts.Assertion;
import org.testng.asserts.IAssert;
public class SeleniumAssertion extends Assertion {
private final WebDriver driver;
public SeleniumAssertion(WebDriver driver) {
super();
this.driver = driver;
}
abstract private class SeleniumAssert implements IAssert {
private final String message;
public SeleniumAssert(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
@Override
public Object getActual() {
return null;
}
@Override
public Object getExpected() {
return null;
}
@Override
abstract public void doAssert();
}
public void assertPresentElementLocated(final By locator) {
doAssert(new SeleniumAssert("There are no elements located by " + locator) {
@Override
public void doAssert() {
assertTrue(driver.findElements(locator).size() > 0, getMessage());
}
});
}
public void assertDisplayed(final WebElement element) {
doAssert(new SeleniumAssert("Element " + element + " is not displayed") {
@Override
public void doAssert() {
try {
assertTrue(element.isDisplayed(), getMessage());
} catch (StaleElementReferenceException ex) {
fail(getMessage());
}
}
});
}
}