当前位置: 首页 > 知识库问答 >
问题:

为什么使用页面工厂?

杨波娃
2023-03-14

我是一名新的测试工程师,一直在阅读页面对象模型并实现它们,并不断遇到页面工厂。我知道页面工厂是一个POM,它提供了额外的功能,例如在调用页面工厂时实例化所有元素,以及更可读的测试代码(尽管我不完全赞同可读性)。明确地说,我对POM很感兴趣。代码的可重用性和相对容易的维护非常好,我正在朝着这个方向努力。

我要回答的两个问题是:

  • 为什么我要实例化所有元素,而不是动态地进行

共有3个答案

柳胜
2023-03-14

为什么我想实例化所有的元素,而不是在运行中?

如果我没记错的话,PageFactory会扫描任何WebElement属性/字段及其属性,并用代理将它们包装起来。此时您还没有接触Selenium服务器(您可以在服务器控制台输出中检查这一点)。尝试访问属性后,WebElement将被实例化。因此,如果您只访问了一个PO属性/字段,则只会创建一个WebElement

页面工厂的优势是什么,我没有看到?

属性的使用使代码更具可读性,也更容易生成。创建一个为您生成PageObject的工具是很常见的。

PageFactory是为了支持PageObject模式而创建的,仅此而已。你不一定要使用它才能走这条路。

最后,如果您对它的详细工作方式感到好奇,我建议您检查源代码。这是我刚开始使用硒时做的。

巢嘉志
2023-03-14

有几个答案说PageFactory在实例化时“加载”了所有的网络元素——这实际上是不正确的。

直到您访问这些元素,它们才会加载。它是通过基类和RealProxy完成的。它确实在引擎盖下使用了标准的FindElement(s)By方法,所以使用WebElements相对于存储By并在需要时加载它们并没有真正的性能优势。

我选择不使用PageFactory模型的一个原因是,我可能会搜索一个我不想存在的元素,通过使用自动连线方法,它会在我可以在测试中说“不存在”之前搜索它是否存在。

另一个问题是PageFactory如何实例化WebElement和如何驱动程序之间存在细微差异。FindBy实例化它们。让我感到困扰的是,PageFactory的版本没有实现IWrapsDriver,这意味着您无法获得用于从元素中查找元素的驱动程序。这可能看起来不多,但这意味着当你想要编写WebElement方法的扩展,而这些扩展又需要一个驱动程序时,你必须找到一种(更复杂的)获取驱动程序的方法,尤其是因为我认为PageObjectModel不应该有一个直接提到司机...

但也就是说,在很多情况下,开箱即用的PageFactory方法是非常好的。我认为,使用或不使用PageFactory的关键在于对测试代码和页面对象模型如何工作和相互作用有一个一致的方法,因为这是可维护性的关键。

夹谷斌蔚
2023-03-14

下面是西蒙·斯图尔特,2017年奥斯汀SeleniumConf大会上硒项目负责人和页面工厂创始人。在他的主题演讲中,他说不要使用PageFactory。本节演讲从这里开始:

https://youtu.be/gyfUpOysIF8?t=1517

实际报表是27:25。

 类似资料:
  • 本文向大家介绍为什么我们在HTML页面中使用head标签?,包括了为什么我们在HTML页面中使用head标签?的使用技巧和注意事项,需要的朋友参考一下 <head>标记是HTML页面中所有head元素的容器。要添加<head>…</ head>标签非常简单。在其下添加文档标题或元信息,样式,脚本等。 请记住,<title>…</ title>标签会添加到<head>…</ head>标签内。 示例

  • 本文向大家介绍404页面有什么作用?相关面试题,主要包含被问及404页面有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 404页面实际上跟HTTP Status 404类似,标识资源找不到。当然实际上404页面现在的玩法就多了,比如公益页面等

  • 本文向大家介绍什么是Razor页面?相关面试题,主要包含被问及什么是Razor页面?时的应答技巧和注意事项,需要的朋友参考一下 是dot net core中支持ASP网页表格的一种开发模型。@page 作为页面的起始标志。  

  • 任何关于报告源代码的其他信息,请在评论中让我知道。

  • Apache CouchDB是最新的数据库之一。 CouchDB具有无模式的文档模型,更适合常见应用。可支持非常大数据量查询。 使用CouchDB的主要原因是什么? CouchDB易于使用。 有一个单词可以描述CouchDB - “Relax”。 它也是组成CouchDB官方标志一个单词。 “Apache CouchDB已经开始了,现在是放松时间。” CouchDB具有基于HTTP的REST AP

  • DevOps允许敏捷开发团队实施持续集成和持续交付。这有助于他们更快地将产品推向市场。 其他一些的重要原因是: 可预测性:DevOps可以显着降低新版本的故障率 再现性:版本一切,以便可以随时恢复早期版本。 可维护性:在新版本崩溃或禁用当前系统的情况下,可以毫不费力地进行恢复。 交付/上市时间:DevOps通过简化的软件交付将上市时间缩短至50%。对于数字和移动应用尤其如此。 更高的质量:DevO