info.novatec.testit.webtester.pages.Page Maven / Gradle / Ivy
package info.novatec.testit.webtester.pages;
import info.novatec.testit.webtester.adhoc.AdHocFinder;
import info.novatec.testit.webtester.browser.Browser;
import info.novatec.testit.webtester.internal.OffersAdHocFinding;
import info.novatec.testit.webtester.internal.OffersBrowserGetter;
import info.novatec.testit.webtester.internal.OffersPageCreation;
import info.novatec.testit.webtester.pagefragments.PageFragment;
import info.novatec.testit.webtester.pagefragments.annotations.IdentifyUsing;
/**
* Base class for all WebTester pages.
*
* Provides the means to:
*
* - retrieve the {@link Browser browser} instance the page was created from
* - create other pages to be used in navigation methods
* - ad-hoc find {@link PageFragment page fragments}
*
* Example Page:
*
* public interface LoginPage extends Page {
*
* @Wait(Until.VISIBLE)
* @IdentifyUsing("#username")
* TextField username();
*
* @IdentifyUsing("#password")
* PasswordField password();
*
* @Named("Login Button")
* @IdentifyUsing("#login")
* Button login();
*
* @PostConstruct
* default void assertPageIsDisplayed() {
* assertThat(username().isVisible).isTrue();
* assertThat(password().isVisible).isTrue();
* assertThat(login().isVisible).isTrue();
* }
*
* default MainPage loginWith(String username, String password) {
* return setUsername(username).setPassword(password).clickLogin();
* }
*
* default LoginPage setUsername(String username) {
* username().setText(username);
* return this;
* }
*
* default LoginPage setPassword(String password) {
* password().setText(password);
* return this;
* }
*
* default MainPage clickLogin() {
* login().click();
* return create(MainPage.class);
* }
*
* }
*
*
* @see IdentifyUsing
* @see Browser
* @see PageFragment
* @see AdHocFinder
*/
public interface Page extends OffersBrowserGetter, OffersPageCreation, OffersAdHocFinding {
@Override
default AdHocFinder finder() {
return new AdHocFinder(browser());
}
}