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