方法返回两个java类
我有两门课:方法返回两个java类,java,selenium,testing,methods,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
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 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)
然而,它不工作,因为这种方法需要在这两个带有选择器的页面类型-如何处理 您可以创建一个名为LoginPageUi的接口。让您的UnoLoginPageUi和DuoLoginPageUi实现该接口 然后您的getUi方法将是
private-LoginPageUi-getUi(String-pageType)
离题:我建议实现枚举而不是字符串页面类型。您可以创建一个名为LoginPageUi的接口。让您的UnoLoginPageUi和DuoLoginPageUi实现该接口 然后您的getUi方法将是
private-LoginPageUi-getUi(String-pageType)
离题:我建议实现枚举而不是字符串pageType。为两个被调用的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");
}
或
然后将父引用返回为:
private Ui getUi(String pageType) {
if (pageType.equals("UNO")) {
return new DuoLoginPageUi();
}
else if (pageType.equals("DUO")) {
return new UnoLoginPageUi;
}
return null;
}
为两个被调用的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");
}
或
然后将父引用返回为:
private Ui getUi(String pageType) {
if (pageType.equals("UNO")) {
return new DuoLoginPageUi();
}
else if (pageType.equals("DUO")) {
return new UnoLoginPageUi;
}
return null;
}
为这两个类创建一个公共抽象
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");
}
并让UnoLoginPageUi
和DuoLoginPageUi
扩展
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();
}
}
为这两个类创建一个公共抽象
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");
}
并让UnoLoginPageUi
和DuoLoginPageUi
扩展
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();
}
}
添加更多关于如何从这两个类调用方法的细节。我们的问题只包含codeCreate,即每个类实现的接口。将该接口用作返回类型。另外,对页面类型使用枚举而不是字符串。错误是什么<代码>返回新的UnoLoginPageUi代码>需要()顺便说一句。如果你这样做,你需要每次检查类型。为这些UI类创建一个包装器,并从包装器扩展它们。因此,您可以使用此类型,并在需要时简单地执行null检查和强制转换。将返回类型(当前为Class
)替换为Object
),您可以在代码上使用接口添加更多详细信息,说明如何从这两个类调用方法。我们的问题只包含codeCreate,即每个类实现的接口。将该接口用作返回类型。另外,对页面类型使用枚举而不是字符串。错误是什么<代码>返回新的UnoLoginPageUi代码>需要()顺便说一句。如果你这样做,你需要每次检查类型。为这些UI类创建一个包装器,并从包装器扩展它们。因此,你可以使用这个类型,只需在需要时进行null检查并强制转换。将返回类型(当前Class
替换为Object
)你可以在你的代码上使用接口是的,这就是我要回答的:Dyup这就是我要回答的:DYour solution ok,但是你应该让Ui
成为一个接口或抽象类,因为它没有任何行为或字段;由于密码字段是最终的,您不能更改它:)您必须删除字段的最终修饰符。这不是修饰符的错误,实际上,在我尝试像上面那样强制转换一些选择器之后,我只能执行。getClass或调用getUi()上的另一个函数但不是选择器。您的解决方案还可以,但您应该将Ui
设置为接口或抽象类,因为它没有任何行为或字段。不幸的是,我不能这样设置:getUi(“DUO”).password.setValue(password);由于密码字段是最终的,您不能更改它:)您必须删除字段的最终修饰符。这不是修饰符的错误,实际上,在我尝试像上面那样强制转换一些选择器之后,我只能执行。getClass或调用getUi()上的另一个函数但不是选择器。