Java 对定位器使用页面对象模型而不是使用页面工厂有什么区别?

Java 对定位器使用页面对象模型而不是使用页面工厂有什么区别?,java,selenium,testing,Java,Selenium,Testing,我想弄清楚在时间和定位方式上使用POM比POF要付出的努力是什么(我知道它在定位方式上是不同的)同样在POM中我使用的是By,那么除了写,还有什么区别,我是说在使用或时间或定位元素上,那么为什么建议避免POF呢?简短回答: 如果没有页面工厂支持,POM将失去在框架中具有以下功能的优势,因为页面工厂是增强的POM,它将在框架设计和开发期间提供关键功能 长答案: 需要了解的两件事:页面对象模型(POM)和增强的POM,即页面工厂 页面对象模型(POM):这是Selenium中的一种对象设计模式,其中

我想弄清楚在时间和定位方式上使用POM比POF要付出的努力是什么(我知道它在定位方式上是不同的)同样在POM中我使用的是By,那么除了写,还有什么区别,我是说在使用或时间或定位元素上,那么为什么建议避免POF呢?

简短回答:

如果没有页面工厂支持,POM将失去在框架中具有以下功能的优势,因为页面工厂增强的POM,它将在框架设计和开发期间提供关键功能

长答案:

需要了解的两件事:页面对象模型(POM)和增强的POM,即页面工厂

页面对象模型(POM):这是Selenium中的一种对象设计模式,其中网页被表示为类,页面上的各种元素被定义为类上的变量。然后,所有可能的用户交互都可以作为类上的方法实现

为了支持页面对象模型,我们使用页面工厂。Selenium中的页面工厂是页面对象的扩展,可以以多种方式使用。以下是一些例子-

注意-如果我们在没有页面工厂的情况下使用POM,那么我们的框架中就不会有以下功能的优势。

  • 我们可以使用页面工厂初始化在网页类或页面对象中定义的web元素
  • 我们可以在PageFactory中使用AjaxElementLocatorFactory,该工厂使用显式等待&在访问每个元素时,它将等待多达N秒
  • 注释@CacheLookup在工厂中,当我们知道某些元素总是会出现在页面上时,缓存是有意义的。例如,在Google页面上,搜索按钮位于搜索和结果两个页面上,所以可以缓存查找搜索按钮的元素

  • 缺点是什么?因为据我所知,西蒙·斯图尔特是2017年奥斯汀SeleniumConf硒项目负责人和页面工厂的创始人。在他的主题演讲中,他说不要使用PageFactory。本节演讲从这里开始:实际发言时间为27:25。我不明白为什么,但这里面有点道理。另外,显式等待也可以用于POM with wait.until,那么它的作用是什么呢?(甚至比隐式等待更好)不是我们不应该使用页面工厂,而是我们应该注意一些事情,比如我们不应该将web元素声明为静态的,在这种情况下,我们失去了页面工厂概念的优势。已经有多个项目使用了PageFactory,即使我在过去一年中一直使用PageFactory,但我发现框架中没有任何问题。我们得到了稳定的结果。问题是我们如何在一个框架中实现页面工厂。在POF中,使用“@FindBy或@FindBys”注释和初始化来标识元素,所有元素都是在标识时声明的(PageFactory.initElements(driver,this);。在POM中,初始化是动态进行的(例如,如果一开始就没有什么东西,那就有区别了)