一些答案表明,PageFactory在实例化时会“加载”所有WebElements-这实际上是不正确的。
元素只有在您访问它们后才加载。它是通过基类和RealProxy完成的。它确实FindElement(s)By在后台使用了标准方法,因此拥有WebElement与存储By和在需要时加载By并没有真正的性能优势。
我选择不使用PageFactory模型的原因之一是,我可能正在搜索一个我不希望存在的元素,并且通过使用自动连线方法,它会搜索是否存在该元素,然后再说“测试中不存在”。
另一个问题是PageFactory实例化WebElement和Driver.FindBy实例化WebElement之间存在细微的差异。让我感到困扰的一个原因是PageFactory的版本未实现IWrapsDriver,这意味着您无法获得用于从元素中查找元素的驱动程序。这看起来似乎并不多,但是这意味着当您想要向WebElement方法编写扩展而又需要驱动程序的扩展时,您必须找出一种(更为复杂的方式)获取驱动程序的方法,尤其是因为我相信PageObjectModel应该没有直接参考驱动程序…
但这就是说,在很多情况下,开箱即用的PageFactory方法非常好。我认为使用(或不使用)PageFactory的关键只是对测试代码和页面对象模型的工作方式和交互方式采用一致的方法,因为这是可维护性的关键。



