我发现 Page Object 模式非常有用,并使用了修改后的 PageFactory(为自定义超时进行了参数化)。
我还使用 WidgetObjects(基本上是通过构造函数带有父引用的 PageObjects)来表示跨页面的常见主题。
我认为并非所有页面都需要 URL 关联,因此我将其保留在我的基类之外。网址参数?我让我的 PageObjects 以用户为中心;如果用户不需要知道,PageObject 也不需要。对象状态只是顺序执行和构造的产物。
- 我通常使用我的自定义 PageFactory 来初始化,或者对于复杂的对象我调用构造函数并将实例传递给 PageFactory 以进行静态元素初始化。
- 我的 PageObjects 总是知道如何导航到下一页,并且有返回这些 PageObjects 的方法。
return this;
我尽可能使用链接( ),因为它使测试代码非常流畅,这是我最喜欢使用这种模式的部分:
/**
* Test Utility. Create an Assembly.
* @return A reference to the viewport of the created Assembly.
*/
public ViewAssemblyPage createAssembly(String title, String type,
String description, Date dueDate, int numParts) {
AssemblyPage assy = login("JoeCoder", "foopass")
.createRecord()
.assembly(type)
.formInput(title, description, dueDate);
return assy.getTable()
.openPartsPicker()
.findParts(type)
.selectSomeParts(numParts)
.submitSelection();
}