如何使用条件返回类型创建类方法

bjo*_*101 1 java

请原谅这篇文章中的术语问题.这似乎是一个基本的Java问题,我只是在搜索中找不到结果.

我想创建一个可能在Selenium pageObject框架中返回多个类型的方法.见下面的例子:

public class ProductPage extends BasePage {
    public ProductPage(WebDriver driver) {
         super(driver);
    }

    public ProductPage enterValue(String inputText) {
         driver.findElement(By.id("someId")).sendKeys(inputText);
         return this;
    }
Run Code Online (Sandbox Code Playgroud)

方法enterValue偶尔会落到与ProductPage不同的页面.如果我知道它可以导航到其他地方,我倾向于创建一个不同的方法.然而,这使得其他人更难理解和维护测试.

有没有办法混淆返回类型并在允许方法返回不同类型的方法中添加条件?这是我最好的尝试:

public NotSureWhatToPutHere enterValue(String inputText) {
     driver.findElement(By.id("someId")).sendKeys(inputText);
     if(isAlertPresent){
          return new ProductAlertPage(driver);
     } else if (isErrorDisplayed) {
          return new ErrorPage(driver);
     } else {
          return this;
     }
}
Run Code Online (Sandbox Code Playgroud)

jca*_*cal 5

您需要使用多态或继承.

所以ProductAlertPage,ErrorPage两者都从一个interfaceclass类似的东西继承Page.然后你可以有一个返回类型Page.


在您的情况下ErrorPage,ProductAlertPage也应该扩展BasePage,然后您可以返回BasePage为返回类型.

public BasePage enterValue(String inputText) {
  driver.findElement(By.id("someId")).sendKeys(inputText);
    if(isAlertPresent){
      return new ProductAlertPage(driver);
    } else if (isErrorDisplayed) {
      return new ErrorPage(driver);
    } else {
      return this;
   }
}
Run Code Online (Sandbox Code Playgroud)