Menu

Basics

Michael Bulla

creating a simple page object

:::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();
}

a shortcut

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();
}

Instantiating pos

:::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();
    }
}

Using parameters

:::java
@Page(name="Index")
public interface Indexsite {
  @Locator(name="Link {0}")
  @LocateByXpath("//a[text()='{0}']
  ILink linkByName(@ParamName("Linkname") String linkname);
}

opening sites

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&parasFromMap

    @PageAccessor(absoluteUri="http://google.de?q={1}")
    void search(String query);
    // => http://google.de?q=para1
}

Getting access to page attributes

There are some Annotaions giving you access to site information

@Page(name="Simple Po")
public interface SimplePO {
    @PageSource
    String getHtml();

    @Title
    String getTitle();
}

Related

Wiki: Cheatsheet
Wiki: Experimental
Wiki: Getting started
Wiki: Home

MongoDB Logo MongoDB