PopperFramework Wiki
Declarative PageObject description
Status: Beta
Brought to you by:
michaelbulla
Until now we described just Webelements on pages. But maybe you want to add some more value to your PageObjectws
:::java
@Page(name="Login")
public abstract class LoginPO {
@PageAccessor(uri="login.html")
public abstract void open();
public void doLogin(String username, String password) {
usernameTextbox().type(username);
passwordTextbox().type(password);
submitLoginButton().click();
}
@Locator(name="Username", xpath="//input[@name='username']")
public abstract ITextBox usernameTextbox();
@Locator(name="Password", xpath="//input[@name='password']")
public abstract ITextBox passwordTextbox();
@Locator(name="Login Submit", cssSelector=".submitLoginButton")
public abstract IButton submitLoginButton();
}
:::java
@Page(name="Login")
public abstract class LoginPO {
@PageAccessor(uri="login.html")
public abstract void open();
public void doLogin(String username, String password) {
usernameTextbox().type(username);
passwordTextbox().type(password);
submitLoginButton().click();
}
@Locator(name="Username", xpath="//input[@name='username']")
abstract ITextBox usernameTextbox();
@Locator(name="Password", xpath="//input[@name='password']")
abstract ITextBox passwordTextbox();
@Locator(name="Login Submit", cssSelector=".submitLoginButton")
abstract IButton submitLoginButton();
}
Locator-methods are now package-private, so only valuable methods are visible in your tests
:::java
@Page(name="Login")
public abstract class LoginPO implements LoginLocator {
public void doLogin(String username, String password) {
usernameTextbox().type(username);
passwordTextbox().type(password);
submitLoginButton().click();
}
}
public interface LoginLocator {
@PageAccessor(uri="login.html")
void open();
@Locator(name="Username", xpath="//input[@name='username']")
ITextBox usernameTextbox();
@Locator(name="Password", xpath="//input[@name='password']")
ITextBox passwordTextbox();
@Locator(name="Login Submit", cssSelector=".submitLoginButton")
IButton submitLoginButton();
}
:::java
@Page(name="Login")
public abstract class LoginPO implements LoginLocator {
public void doLogin(String username, String password) {
usernameTextbox().type(username);
passwordTextbox().type(password);
submitLoginButton().click();
}
}
public abstract class LoginLocator {
@PageAccessor(uri="login.html")
public abstract void open();
@Locator(name="Username", xpath="//input[@name='username']")
abstract ITextBox usernameTextbox();
@Locator(name="Password", xpath="//input[@name='password']")
abstract ITextBox passwordTextbox();
@Locator(name="Login Submit", cssSelector=".submitLoginButton")
abstract IButton submitLoginButton();
}