1 package com.atlassian.pageobjects; 2 3 import javax.annotation.concurrent.NotThreadSafe; 4 5 /** 6 * A delayed binder that gives the caller full control over the creation and lifecycle of the page object. 7 */ 8 @NotThreadSafe 9 public interface DelayedBinder<T> 10 { 11 /** 12 * Instantiates, injects, and initialises the page object, but doesn't execute its lifecycle methods. 13 * 14 * @return The binder for chaining 15 */ 16 DelayedBinder<T> inject(); 17 18 /** 19 * Builds the page object and executes its waitfor lifecycle methods 20 * 21 * @return The binder for chaining 22 */ 23 DelayedBinder<T> waitUntil(); 24 25 /** 26 * Builds, waits for, and validates the state of the page object 27 * @return The binder for chaining 28 */ 29 DelayedBinder<T> validateState(); 30 31 /** 32 * Goes through the full binding, including lifecycle methods, to determine whether the page object can be bound. 33 * 34 * @return True if the binding was successful, in which case {@link #bind()} will return the page object instance 35 * without failing 36 */ 37 boolean canBind(); 38 39 /** 40 * @return The current page object, building if necessary. If called before any other methods are called, it will 41 * return the instantiated object but with no injections or lifecycle methods called. 42 */ 43 T get(); 44 45 /** 46 * Builds, waits for, validates the state of, and returns the page object 47 * @return The fully bound page object 48 */ 49 T bind(); 50 }