所以我有一个有趣的难题,我很想从其他 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();
}
任何想法将不胜感激!