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

时间:2019-01-14 22:23:07

标签: 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;
    }

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;
     }
}

2 个答案:

答案 0 :(得分:5)

您需要使用多态性或继承。

因此ProductAlertPageErrorPage都从interfaceclass继承,例如Page。然后,您可以使用Page的返回类型。


在您的情况下,ErrorPageProductAlertPage也应扩展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;
   }
}

答案 1 :(得分:1)

您可以尝试:

public Page enterValue(String inputText) {

}

Pageextended的{​​{1}}在ProductAlertPage处。

ErrorPage

或者,您也可以将public ProductAlertPage extends Page { // code for ProductAlertPage } public ErrorPage extends Page { // code for ErrorPage } 设为Page,并让interfaceProductAlertPage都实现ErrorPage,如下所示:

interface

这是一个更好的解决方案,因为它耦合性较差。