gpt4 book ai didi

java - 何时停止在对象中定义 FindBy 并将其移至测试

转载 作者:行者123 更新时间:2023-12-02 06:48:24 24 4
gpt4 key购买 nike

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

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

在我的页面对象中,我选择将 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();
}

}

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

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

如有任何想法,我们将不胜感激!

最佳答案

在页面对象类中执行此操作。原因如下:

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

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

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

顺便说一句,我建议仅使用您将要使用的映射元素。我发现,如果我列出了我可能需要的每一个元素,那么我最终会得到一个充满了废话的庞大类(class),而我手上的时间却更少了。

关于java - 何时停止在对象中定义 FindBy 并将其移至测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com