使用Java Selenium SlowLoadableComponent的类结构

使用Java Selenium SlowLoadableComponent的类结构,java,selenium,pageobjects,Java,Selenium,Pageobjects,我正在使用Selenium及其PageFactory设计一个应用程序 我的每个页面对象类都继承自中具有标准方法的基类,但也有一些页面需要SlowLoadableComponent。由于这是作为一个抽象类实现的,所以我不能同时扩展它和我的基页类 让我的基页类扩展SlowLoadableComponent有什么缺点吗?如果是这样的话,您会将基页类实现为带有默认方法的接口还是其他什么?如果您有 Java中多重继承的解决方法是 因此,您可以重构代码,使其如下所示: public interface IB

我正在使用Selenium及其PageFactory设计一个应用程序

我的每个页面对象类都继承自中具有标准方法的基类,但也有一些页面需要SlowLoadableComponent。由于这是作为一个抽象类实现的,所以我不能同时扩展它和我的基页类

让我的基页类扩展SlowLoadableComponent有什么缺点吗?如果是这样的话,您会将基页类实现为带有默认方法的接口还是其他什么?

如果您有

Java中多重继承的解决方法是

因此,您可以重构代码,使其如下所示:

public interface IBasePage {
  //... unimplemented base page methods
}

public class BasePageImpl implements IBasePage {
  public BasePageImpl(WebDriver webDriver) { //... }
  //... implemented base page methods
}

public class FastPage implements IBasePage {
  //... delegate all base page methods to the BasePageImpl
}

public class SlowPage extends SlowLoadableComponent implements IBasePage {
  //... delegate all base page methods to the BasePageImpl
}

但是,在pageobject模式中,实现接口非常繁琐,因为几乎每个页面都必须这样做。“不是吗?”塞弗尔只在快速页面和慢速页面中说。然后可以从这两个类继承。此外,委托这些方法也很简单。IntelliJ可以帮你做到:谢谢你的澄清迈克尔:我也没有意识到你打算继承FastPage和SlowPage。一般来说,我对这个解决方案的组合爆炸有点担心,但对于这个有限的情况,我越想越喜欢它。@IanWorthington您基本上不想将变量声明为
FastPage
SlowPage
。您应该始终将它们声明为
IBasePage
。构建页面时,应使用
FastPage
SlowPage