0

所以我有一个有趣的难题,我很想从其他 Webdriver 框架架构师那里得到一些反馈。目前我遵循一个非常标准的执行模型:

  • 基础对象
  • 页面对象(扩展基本对象)
  • Junit testobject(引用一个或多个页面对象)

在我的页面对象中,我选择将我的 findBy UI 映射定义为变量,然后在我为该页面对象编写的各种方法中引用它们。我觉得这很好用。但是,我正在讨论的一个问题是,当可能存在 50 个单独的超链接时,如何处理页面(及其各自的页面对象)的方法设计。

到目前为止,我的倾向和设计一直是为我创建的大多数页面对象上的每个链接创建方法(我认为它们真的是服务),以便 @Test 我可以简单地调用我想要的方法并完成它。这消除了测试维护的可能性......我知道的标准做法。但是我现在正试图决定......创建 50 种方法是否有意义,为页面对象的每个链接创建一个方法,或者我是否违背自己的意愿并从测试本身传递链接文本,输入一个单一的方法使用传入的参数构建 findBy。

一方面,页面对象中的代码更少,但另一方面,测试变得更加脆弱。这些链接有可能在数百个测试中成为参考。

这是我的模型的一个简短示例:

classname extends baseobject{

   By someLocator = By.linkText("some text");
   By someOtherLocator = By.linkText("some other text");
   By andAnotherLocator = By.id("someid");

   public void someLinkMethod(){
    driver.findElement(someLocator).click();
   }

   public void someOtherLinkMethod(){
    driver.findElement(someOtherLocator).click();
   }

   public void someidMethod(){
    driver.findElement(andAnotherLocator).click();
   }

}

这样我们就到了问题的结尾。该模型非常适合测试设计。我的服务(方法)是绝缘的并且易于维护。但是,如果链接有 50 个 UI 映射而不是上面显示的 2 个,我该怎么办?我玩弄了以下设计,但真的不喜欢它@Test:

public void selectFromLeftBar(String barItem){
  driver.findElement(by.linkText(barItem)).click();
}

任何想法将不胜感激!

4

1 回答 1

2

在您的页面对象类中执行此操作。以下是原因:

  1. 如果您的页面更改了链接文本,您的代码会做什么?即使链接做同样的事情,您也必须进入每个测试并更改该文本。

  2. 如果您的页面删除该链接会怎样?您遇到了同样的问题,即每次调用该链接时都必须查找。如果它是一个方法......那么您删除该方法,并且您的 IDE 会通知您使用它的每个实例。

  3. 最后,您正在为测试提供标准接口。如果您在这里例外,什么会阻止您将其他内容传递到您的页面中?

作为旁注,我建议只映射您将要使用的元素。我发现,如果我绘制出我可能需要的每一个元素,那么我最终会得到一个充满绒毛和更少时间的庞大课程。

于 2013-08-20T17:53:48.323 回答