首先,.NET
PageFactory实现中没有“内置等待”
。您可以在调用中轻松指定一个
InitElements(稍后对此进行详细说明)。目前,最适合您的选择是您的选择3,尽管我不会公开该
IWebElement成员。我会做到的
private,因为
PageFactory可以像枚举公共成员一样轻松地枚举私有成员。因此您的页面对象将如下所示:
[FindsBy(How = How.Id, Using = "MonthDropdown")]private IWebElement dropDown;public SelectElement MonthDropdownElement{ get { return new SelectElement(dropdown); }}IWebElement在需要时如何获得实际值?自从
SelectElement实现以来
IWrappedElement,
WrappedElement如果您需要访问
IWebElement接口提供的元素的方法和属性,则可以简单地调用属性。
.NET绑定的最新版本已将重组
PageFactory为更可扩展。要添加所需的“内置等待”,可以执行以下操作:
// Assumes you have a page object of type MyPage.// Note the default timeout for RetryingElementLocator is// 5 seconds, if unspecified.// The generic version of this pre looks like this:// MyPage page = PageFactory.InitElements<MyPage>(new RetryingElementLocator(driver), TimeSpan.FromSeconds(10));MyPage page = new MyPage();PageFactory.InitElements(page, new RetryingElementLocator(driver, TimeSpan.FromSeconds(10)));
此外,如果您 确实
需要自定义事物的工作方式,那么始终欢迎您实施
IPageObjectMemberDecorator,它使您可以完全自定义枚举属性的方式以及将值设置为用这些属性修饰的属性或字段的方式。的(非泛型)重载之一
PageFactory.InitElements采用对象实现的实例
IPageObjectMemberDecorator。
我将撇开严格定义的页面对象模式的正确实现,不要在每个页面对象之外公开任何WebDriver对象。否则,您所实现的只是一个“页面包装器”,这是一种非常有效的方法,而不是所谓的“页面对象”。



