在java中返回两个类的方法

时间:2017-10-26 12:08:37

标签: java selenium testing methods

我有两个班级:

public class UnoLoginPageUi {
    public final Input username = new Input("id=username");
    public final Input password = new Input("id=password");
    public final Button loginButton = new Button("name=login");
}

public class DuoLoginPageUi {
    public final Input username = new Input("id=usernameField");
    public final Input password = new Input("id=passwordField");
    public final Button loginButton = new Button("id=submitButton");
}

在一个共同的课堂上,我想做出类似的事情:

public void loginUsingUsernameAndPassword(String username, String password, String pageType) {
    getUi(pageType).username.waitForToBeDisplayed();
    getUi(pageType).username.setValue(username);
    getUi(pageType).password.setValue(password);
    getUi(pageType).loginButton.click();
}

其中getUi()是gas参数pageType(即UNO或DUO)的方法。

private Class getUi(String pageType) {
    if (pageType.equals("UNO")) {
        return new DuoLoginPageUi();
    }
    else if (pageType.equals("DUO")) {
        return new UnoLoginPageUi;
    }
    return null;
}

然而它不起作用,因为这个方法需要在这两个页面的类型中选择器 - 如何处理?

3 个答案:

答案 0 :(得分:5)

您可以创建名为LoginPageUi的界面。让你的UnoLoginPageUi和DuoLoginPageUi实现该接口。

然后你的getUi方法将是private LoginPageUi getUi(String pageType)

偏离主题:我建议实现枚举而不是String pageType。

答案 1 :(得分:0)

为所谓的UI创建父类或接口:

public abstract class Ui{
}

public interface Ui{
}

并扩展它:

public class UnoLoginPageUi extends Ui{
  public final Input username = new Input("id=username");
  public final Input password = new Input("id=password");
  public final Button loginButton = new Button("name=login");
}

public class DuoLoginPageUi extends Ui {
  public final Input username = new Input("id=usernameField");
  public final Input password = new Input("id=passwordField");
  public final Button loginButton = new Button("id=submitButton");
}

public class UnoLoginPageUi implements Ui{
  public final Input username = new Input("id=username");
  public final Input password = new Input("id=password");
  public final Button loginButton = new Button("name=login");
}

public class DuoLoginPageUi implements Ui {
  public final Input username = new Input("id=usernameField");
  public final Input password = new Input("id=passwordField");
  public final Button loginButton = new Button("id=submitButton");
}

然后将父引用返回为:

private Ui getUi(String pageType) {
if (pageType.equals("UNO")) {
    return new DuoLoginPageUi();
}
else if (pageType.equals("DUO")) {
    return new UnoLoginPageUi;
}
return null;
}

答案 2 :(得分:0)

为两个类创建一个通用抽象

public abstract class LoginPageUi {
    public final Input username = new Input("id=username");
    public final Input password = new Input("id=password");
    public final Button loginButton = new Button("name=login");        
}

UnoLoginPageUiDuoLoginPageUi扩展

public class UnoLoginPageUi extends LoginPageUi {
    public static String getPageType() { return "UNO"; }
}

public class DuoLoginPageUi extends LoginPageUi {
    public static String getPageType() { return "DUO"; }
}

该方法将返回公共抽象

private LoginPageUi getUi(String pageType) {
    if (pageType.equals(DuoLoginPageUi.getPageType())) {
        return new DuoLoginPageUi();
    }
    else if (pageType.equals(UnoLoginPageUi.getPageType())) {
        return new UnoLoginPageUi;
    }
    return null;
}

我也希望你意识到,每当你打电话给getUi(pageType)时,它都会返回一个新实例。当您调用getUi(pageType).loginButton.click();时,返回的实例没有设置值。

重构:

public void loginUsingUsernameAndPassword(String username, String password, String pageType) {
    LoginPageUi ui = getUi(pageType);
    if (ui != null) {
        ui.username.waitForToBeDisplayed();
        ui.username.setValue(username);
        ui.password.setValue(password);
        ui.loginButton.click();
    }
}