如何设计我的Java类以使用已定义的Utility类的方法?

时间:2013-03-22 17:31:38

标签: java oop selenium webdriver

如何设计我的Java类以正确扩展Utility类?这是我目前如何做的截图,但我怀疑有更好的方法来做到这一点?我在这里使用适当的面向对象设计吗?我是这样做的,因为需要扩展必需的 LoadableComponent类,并且还可以访问我自己的WebDriverUtils实用程序类中的所有静态方法。我正在寻找一个更好的主意,因为我不是一个受过正式教育的程序员。

换句话说,Utility类不是"是"并且它不是"有一个",那么它如何适应oop世界?

如果你想看一个我如何实现这个图的例子,我写的一些代码在GitHub上,参见my project here。如果有人想发布一个正确的方法来做这个,那也很棒。

enter image description here

注意:在此Web浏览器测试自动化项目图中,TabIFrameOne和tabIFrameTwo是页面对象,用于处理iframe何时完成加载和识别可以与之交互的框架中的元素。 DefaultPage是主浏览器窗口DOM,不代表iFrames中的DOM。每个iFrame类都使用WebDriver PageFactory.initObjects()来加载Web元素。

2 个答案:

答案 0 :(得分:3)

我想说继承在这里是个坏主意。页面可能有实用功能,但它不是实用功能。

继承意味着IS-A:如果A类扩展B,则A类IS-A B.您必须能够在每个要求B的上下文中使用A的实例。

组成是指HAS-A。比继承更喜欢组合。

我也不喜欢将对象映射到HTML Web组件的面向对象设计。太耦合......

答案 1 :(得分:1)

我最终通过将“私有WebDriver”对象的实例传递到我之前尝试扩展的类中来部分地解决了这个问题。这允许我将WebDriver对象更改为实例变量而不是静态共享对象。

这是我的解决方案图。它比它好。也许它仍然可以改进。 enter image description here

但是,我很可能会使用defender methods来解决这个问题。这是我现在用于GitHub project here的模式。