如何设计我的Java类以正确扩展Utility类?这是我目前如何做的截图,但我怀疑有更好的方法来做到这一点?我在这里使用适当的面向对象设计吗?我是这样做的,因为需要扩展必需的 LoadableComponent类,并且还可以访问我自己的WebDriverUtils实用程序类中的所有静态方法。我正在寻找一个更好的主意,因为我不是一个受过正式教育的程序员。
换句话说,Utility类不是"是"并且它不是"有一个",那么它如何适应oop世界?
如果你想看一个我如何实现这个图的例子,我写的一些代码在GitHub上,参见my project here。如果有人想发布一个正确的方法来做这个,那也很棒。
注意:在此Web浏览器测试自动化项目图中,TabIFrameOne和tabIFrameTwo是页面对象,用于处理iframe何时完成加载和识别可以与之交互的框架中的元素。 DefaultPage是主浏览器窗口DOM,不代表iFrames中的DOM。每个iFrame类都使用WebDriver PageFactory.initObjects()来加载Web元素。
答案 0 :(得分:3)
我想说继承在这里是个坏主意。页面可能有实用功能,但它不是实用功能。
继承意味着IS-A:如果A类扩展B,则A类IS-A B.您必须能够在每个要求B的上下文中使用A的实例。
组成是指HAS-A。比继承更喜欢组合。
我也不喜欢将对象映射到HTML Web组件的面向对象设计。太耦合......
答案 1 :(得分:1)
我最终通过将“私有WebDriver”对象的实例传递到我之前尝试扩展的类中来部分地解决了这个问题。这允许我将WebDriver对象更改为实例变量而不是静态共享对象。
这是我的解决方案图。它比它好。也许它仍然可以改进。
但是,我很可能会使用defender methods来解决这个问题。这是我现在用于GitHub project here的模式。