因此,我继承了一个自动化项目(基于Selenium / TestNG的JAVA11),他们希望对其进行重构,以便将Fluent Design用于代码库,以便非编码人员更容易开始测试构建。有道理...但是...他们在整个页面地图工厂中都使用了嵌套的JAVA类,并且仍然希望保持这种状态。
我对C#很好,但对Java和嵌套类的了解却不多。以下是我正在谈论的示例。他们基本上需要Fluent设计,因此,如果需要访问嵌套类,则可以在父类的using事件中调用它,这样就不会影响链。
我到处都在寻找Selenium的例子,但是很难找到一些例子。任何帮助表示赞赏。
\\Code Base
public class UserAdminPage
{
@SuppressWarnings("unused")
private static WebElement element = null;
public UserAdminPage(RemoteWebDriver driver)
{
PageFactory.initElements(driver, this);
}
public static UserAdminPage using(RemoteWebDriver driver)
{
return new UserAdminPage(driver);
}
public static class AddEditUserInformation
{
@FindBy(name = "firstName")
public WebElement FirstName_txtbx;
public UserAdminPage FirstName_txtbx(String firstname)
{
this.FirstName_txtbx.sendKeys(firstname);
return this;
}
@FindBy(name = "lastName")
public WebElement LastName_txtbx;
public AddEditUserInformation LastName_txtbx(String lastname)
{
this.LastName_txtbx.sendKeys(lastname);
return this;
}
}
@FindBy(id = "AccountsList")
public WebElement AccountName_dropdwn;
public void AccountName_dropdwn()
{
this.AccountName_dropdwn.click();
}
@FindBy(id = "Save_button")
public WebElement Save_btn;
public void Save_btn()
{
this.Save_btn.click();
}
}
\\Test Event
UserAdminPage.using(driver).AccountName_dropdwn()
.AddEditUserInformation.FirstName_txtbx("John")
.AddEditUserInformation.LastName_txtbx("Doe")
.Save_btn()
您正在调用AccountName_dropdwn,然后尝试在其返回值上调用一个方法,该方法无效。您尝试调用的方法是AddEditUserInformation.FirstName_txtbx,但这是AddEditUserInformation的(非静态)成员函数,因此只能在该类的实例上调用。您在代码的任何地方都无法创建代码。