PopperFramework Wiki
Declarative PageObject description
Status: Beta
Brought to you by:
michaelbulla
:::java
@Page(name="Login")
public interface LoginSite {
@Locator(name="Username")
@LocateByXpath("//input[@name='username']")
ITextBox usernameTextbox();
@Locator(name="Password")
@LocateByXpath("//input[@name='password']")
ITextBox passwordTextbox();
@Locator(name="Login Submit")
@LocateByCssSelector(".submitLoginButton")
IButton submitLoginButton();
@Locator(name="Register")
@LocateById("register")
ILink registerLink();
}
For default Locator-types you can add the locator-expression to @Locator-annotation
:::java
@Page(name="Login")
public interface LoginSite {
@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();
@Locator(name="Register", id="register")
ILink registerLink();
}
:::java
public class LoginTest {
protected IPoFactory factory;
@Before
public void setup() {
WebdriverContext context = new WebdriverContext();
context.getDefaultConfig().setBrowser(Browser.FIREFOX);
context.getDefaultConfig().setBaseUrl("http://some.location.com/");
factory = context.getFactory();
}
@Test
public void testLogin() {
LoginSite login = factory.createPage(LoginSite.class);
login.open();
login.usernameTextbox().type("Michael");
login.passwordTextbox().type("secret");
login.submitLoginButton().click();
}
}
:::java
@Page(name="Index")
public interface Indexsite {
@Locator(name="Link {0}")
@LocateByXpath("//a[text()='{0}']
ILink linkByName(@ParamName("Linkname") String linkname);
}
An open-method can be declared, too. This can be used, to open the site by entering the url
@Page(name="Simple Po")
public interface OpenedSitePO {
@PageAccessor(uri="/pages/open.html")
void open();
// => http://some.location.com/pages/open.html
@PageAccessor(uri="/pages/open.html?name={0}&password={1}")
void open(String name, String password);
// => http://some.location.com/pages/open.html?name=para1&password=para2
@PageAccessor(uri="/pages/open.html")
void openMapSimple(Map<String, String> parameters);
// => http://some.location.com/pages/open.html?key1=value1&key2=value2
@PageAccessor(uri="/pages/open.html?para1=val1")
void openMapWithExistingParameters(Map<String, String> parameters);
// => http://some.location.com/pages/open.html?para1=val1¶sFromMap
@PageAccessor(absoluteUri="http://google.de?q={1}")
void search(String query);
// => http://google.de?q=para1
}
There are some Annotaions giving you access to site information
@Page(name="Simple Po")
public interface SimplePO {
@PageSource
String getHtml();
@Title
String getTitle();
}
Wiki: Cheatsheet
Wiki: Experimental
Wiki: Getting started
Wiki: Home