Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java POP中的多个项目-如何处理继承?_Java_Selenium_Inheritance_Pageobjects - Fatal编程技术网

Java POP中的多个项目-如何处理继承?

Java POP中的多个项目-如何处理继承?,java,selenium,inheritance,pageobjects,Java,Selenium,Inheritance,Pageobjects,我在如何使用页面对象模式处理测试项目中的继承问题。在我们公司,我们有一个稳定的web应用程序版本,叫做Demo,我们可以从中复制现成的模块。类似于其他新版本客户端应用程序的基础。他们在90%都一样。因此,我认为创建基本页面对象类以及在许多项目中继承这些类将是非常好的。遗憾的是,它们在这10%中有所不同,我需要在类字段中重写XPath。当我从基POP类继承时,我遇到了一个问题,在子类中创建了一个字段,并且父类(基POP类)中的方法在父类中的字段而不是子类上运行。让我看看你的例子。这可能是父类:

我在如何使用页面对象模式处理测试项目中的继承问题。在我们公司,我们有一个稳定的web应用程序版本,叫做Demo,我们可以从中复制现成的模块。类似于其他新版本客户端应用程序的基础。他们在90%都一样。因此,我认为创建基本页面对象类以及在许多项目中继承这些类将是非常好的。遗憾的是,它们在这10%中有所不同,我需要在类字段中重写XPath。当我从基POP类继承时,我遇到了一个问题,在子类中创建了一个字段,并且父类(基POP类)中的方法在父类中的字段而不是子类上运行。让我看看你的例子。这可能是父类:

  public class BaseHomePage {

  @FindBy(xpath = "exampleXpath")
  protected WebElement profileButton;

  public BaseHomePage(WebDriver driver) {
    PageFactory.initElements(driver, this);
  }

  public void goToProfile() {
    profileButton.click();
  }
这是我的孩子班:

public class HomePage extends BaseHomePage {

  @FindBy(xpath = "otherXpath")
  protected WebElement profileButton;

  public HomePage(WebDriver driver) {
    super(driver);
    PageFactory.initElements(driver,this);
  }

  public void goToProfile() {
    profileButton.click();
  }
}

所以问题是我需要在子类中使用相同的方法goToProfile(),因为当我不使用父类中的方法时,调用父类中的字段。我不想重复代码并搜索答案,但我不确定在多个项目中使用POP是否合适。我需要做什么才能把它做好?或者你会建议我用另一种方式做?谢谢你的帮助

我不完全理解您的场景,但听起来您的许多问题都可以通过使用
接口
来解决,并针对该接口进行编程。如果您希望能够使用不同的选择器对不同的客户机测试相同的内容,我已经看到了一种方法,它使用工厂在每次创建页面对象时根据当前客户机将不同的映射(一类选择器)附加到页面对象。这是可行的,但在我看来,回报并不好,因为仅仅自动化通用站点就有了最大的价值。对于特定于客户端的功能,您总是可以有一些特定的案例。但是我如何使用inerfaces来解决我的问题呢?也许你可以告诉我更多或者给我一个我应该使用的模式的名称?我不完全理解你的场景,但是听起来你的很多问题都可以通过使用
接口
来解决,并针对它进行编程。如果您希望能够使用不同的选择器对不同的客户机测试相同的内容,我已经看到了一种方法,它使用工厂在每次创建页面对象时根据当前客户机将不同的映射(一类选择器)附加到页面对象。这是可行的,但在我看来,回报并不好,因为仅仅自动化通用站点就有了最大的价值。对于特定于客户端的功能,您总是可以有一些特定的案例。但是我如何使用inerfaces来解决我的问题呢?也许你可以告诉我更多或者给我一个我应该使用的模式的名字?