分类
文章

Selenium Webdriver中的页面对象模型与属性文件

本教程比较了页面对象模型与属性文件方法。页面对象模型(又称POM)是用于自动化Web应用程序UI流程的常用设计模式。在Selenium Webdriver中使用属性文件时,是一个一般概念。通过为用户提供易于使用的名称,它可以存储大型和复杂的定位器。两者之间的唯一相似之处在于两者都提供了一种在Selenium Webdriver中形成对象存储库的方法。

Page对象模型将定位器封装到类中,并公开管理它们的方法。而Selenium Webdriver中的属性文件需要一个自定义的Property类来提供一种读取定位符的方法。或者,您也可以通过编写Static方法来访问属性文件并获取定位符来实现此目的。在此博客文章中,我们将广泛讨论页面对象模型和属性文件之间的区别。

对于希望从头开始学习Selenium的读者,请阅读我们的逐步Selenium Webdriver教程

页面对象模型与属性文件

没有比通过实际例子更好的学习方法。让我们先从属性文件开始,以便以后可以轻松理解它们之间的区别。您将了解有关POM和属性文件的几乎所有小细节。

属性文件方法

有许多方法可以使用Selenium Webdriver中的属性文件来构造和引用对象存储库(OR)。我们还写了一篇有关实现属性文件的专门文章,有关更多详细信息,请参考它。

奇异属性文件

在这种方法中,您必须执行以下步骤。

  • 将所有对象定位符以键值对的形式存储在单个<UIMap.properties>文件中。
  • 创建一个<Properties.java>类,该类在运行时加载定位器。

txtEmailId = //input[@id="email"]
btnRegister = //button[@class="register"]
...

优点 :

  • 使您不必使用冗长的XPath和ID定位器。
  • 更新定位器值很容易。

缺点 :

  • 搜索定位器的时间将与OR的大小成比例地增加。
  • 随着时间的流逝,单数OR的大小将会增长。管理大型仓库会导致性能问题。

定位器相关属性文件。

按照以下样式,根据定位器类型对属性文件进行分类。

  • id.properties。
  • ClassName.properties。
  • XPath.properties等。

例子

txtEmailId = //input[@id="email"]
btnRegister = //button[@class="register"]
...
lnkAccept=btn.green
lnkDeny=btn.red
lnkWait=btn.orange
...
btnDynamicRow=//table[@id="DynamicData"]/tbody/tr/td[3]
...

优点 :

  • 想要编写代码很容易–
    • 根据文件名处理不同类型的定位器。
    • 查看每种类型对对象存储库大小的贡献。

缺点 :

  • 增加维护成本。
  • 当单个页面由不同类型的定位器组成时,会导致混乱。

用于存储定位器的元接口

使用以下步骤来应用此方法。

  • 提供用于保存<By>定位符的接口。
  • 通过创建Java类来实现接口。
  • 为您的Web应用程序的每个页面创建一个类。

public class RegisterPage implements IRegisterPage {
...
}
 
public interface IRegisterPage {
    By idEmail = By.id("email")
    By idRegister = By.classname("btnRegister")
    ...
}

优点 :

  • 由于它将创建基于上下文的对象,因此使用它们而不是直接处理方法将很容易。
  • 它解决了上面指定的大多数问题。

缺点 :

  • 由于每个页面类都需要附加接口,因此项目占用空间可能会显着增加。

 

页面对象模型方法

在正确的情况下使用页面对象模型时效果最佳。它遵循延迟初始化设计。因此,Webdriver不会加载元素,直到它们出现在图片中。该模型是工厂设计模式的副产品。建议创建单独的Factory Object来初始化其他对象。这种方法在维护和性能方面都落后于所有其他方法。

让我们来看一个使用页面对象模型的简单示例。

POM样本

public class RegisterPage {
 
  @FindBy(id = "register")
  private WebElement registerButton;
 
  public RegisterPage(WebDriver driver) {
      PageFactory.initElements(driver, this);
  }
 
  public void clickRegisterButton() {
      registerButton.click();
  }
}
 
public class PageTest {

   @Test
   public void firstTest() {

      RegisterPage page = new RegisterPage(WebDriver driver);
      page.clickRegisterButton();
   }
}

POM的优缺点

页面对象模型有很多好处,其中一些如下。

优点 :

  • 它强制创建简单的类,并遵循用户友好的命名约定。
  • 您可以重命名方法以使其与情况相关。
  • 由于页面的所有对象都属于一个类,因此很容易在页面和定位符之间形成上下文。
  • 该代码更易于维护且易于调试。

缺点 :

  • 由于POM中的代码位于抽象层的后面,因此测试人员可能会觉得在开始时很难掌握它。
  • 此模型在创建其他对象时会导致松散耦合。这可能会导致运行时性能略有下降。

 

摘要–页面对象模型与属性文件

但是,Page对象模型是实现的最佳和最简单的解决方案。但这取决于您和可能使您选择其他方法的情况。

这就是上面的文章可以指导您选择使用Selenium Webdriver中的页面对象模型还是属性文件的地方。

发表评论

电子邮件地址不会被公开。 必填项已用*标注