[Java11嵌套类,同时使用Fluent设计结构编写代码

问题描述 投票:1回答:2

因此,我继承了一个自动化项目(基于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()
java selenium java-11 fluent
2个回答
2
投票
静态公共内部类实质上是一个完全独立的类,可以很容易地放在另一个文件中。

您正在调用AccountName_dropdwn,然后尝试在其返回值上调用一个方法,该方法无效。您尝试调用的方法是AddEditUserInformation.FirstName_txtbx,但这是AddEditUserInformation的(非静态)成员函数,因此只能在该类的实例上调用。您在代码的任何地方都无法创建代码。


0
投票
正如Zag在他的回答中指出的那样,您所谈论的“嵌套类”实际上是“常规类”(因为它们是静态的),这里唯一不寻常的事情是它们与其他类放在同一文件中。
© www.soinside.com 2019 - 2024. All rights reserved.