创建类

时间:2015-10-02 07:00:24

标签: java class selenium methods webdriver

我是新手,我正在学习webdriver和java :) 我有初学者的问题。

我创建了一类whit locators(findBy)和使用此定位器的方法(senKeys()click()等) - 我使用pagefactory

HomePage
LoginPage
...

我的主要课程AddNewLeadTest是一个类,我从定位器的类初始化方法,我这样做:

HomePage hp = new HomePage(driver);
hp.loginButton.click() 

我想这样做:

HomePage.loginButton.click()

它更快,我不必为每个AddNewLeadTest类的xxxPage新对象创建。

我应该如何编写类/方法来简化创建新对象?

我找到了我想在我的项目中使用的示例(在C#中),但我不知道如何在Java中使用它。见下文。

public static class Pages
{
    private static T GetPage<T>() where T : new()
    {
        var page = new T();
        PageFactory.InitElements(Browser.Driver, page);
        return page;
    }

public static AboutPage About
{
    get { return GetPage<AboutPage>(); }
}

public static TopNavigationPage TopNavigation
{
    get { return GetPage<TopNavigationPage>(); }
}

public static HomePage Home
{
    get { return GetPage<HomePage>(); }
}

public static ContactPage Contact
{
    get { return GetPage<ContactPage>(); }
}

public static RegisterPage Register
{
    get { return GetPage<RegisterPage>(); }
}

public static LoginPage Login
{
    get { return GetPage<LoginPage>(); }
}

public static ManageAccountPage ManageAccount
{
    get { return GetPage<ManageAccountPage>(); }
}

在这个例子中,调用方法是这样的:

public void CanRegisterNewAccount()
        {
            Pages.Register.Goto();
            Pages.Register.RegisterNewUser();    
        }

所以它非常简单明了。

1 个答案:

答案 0 :(得分:0)

那我怎么能用另一种方式写呢,我觉得它看起来不太好......

/*------------------------------------------------------------------------*/

    HomePage gotologin = new HomePage(driver);

    gotologin.gotoLoginPage();

    /*------------------------------------------------------------------------*/
    LoginPage login = new LoginPage(driver);

    login.loginUserToBase("login","pass");

    /*------------------------------------------------------------------------*/

    addLeadPage newLead = new addLeadPage(driver);

    newLead.gotoLeadsPage();

    newLead.addNewLead();

    newLead.enterLeadName("Tolek");

    newLead.enterLeadLastName("Banan");

    newLead.enterLeadTitle("Boss");

    newLead.enterLeadEmail("tolekbanan@gmail.com");

    newLead.enterLeadMobile("123456789");

    newLead.enterLeadWorkPhone("9876541");

    newLead.enterLeadStreet("Kowalskiego");

    newLead.enterLeadCity("Kraków");

    newLead.enterLeadCode("12-123");

    newLead.enterLeadRegion("Małopolska");

    newLead.enterLeadTag("testBase");

    newLead.clickSubmit();

    /*------------------------------------------------------------------------*/

    LeadPage checkStatus = new LeadPage(driver);

    LeadPage.checkUsrStat();

    ...
    ...
    ...

我从https://www.youtube.com/watch?v=DO8KVe00kcU之前的帖子中获得了方法的启发 我认为这是一个我应该使用我的测试的解决方案

我现在展示了这个测试的所有部分。

Pages.class

public static class Pages
{
    private static T GetPage<T>() where T : new()
    {
        var page = new T();
        PageFactory.InitElements(Browser.Driver, page);
        return page;
    }

  **  public static LoginPage Login
    {
        get { return GetPage<LoginPage>(); }
    }**



    public static AboutPage About
    {
        get { return GetPage<AboutPage>(); }
    }

    public static TopNavigationPage TopNavigation
    {
        get { return GetPage<TopNavigationPage>(); }
    }

...

}

LoginPage.class

 public class LoginPage
{

    public void Goto()
    {
        Pages.TopNavigation.LogIn();
    }
}

TopNavigation.class

    [FindsBy(How = How.LinkText, Using = "Log in")]
        private IWebElement logInLink;


 public void LogIn()
        {
            logInLink.Click();
        }

和AddNewLeadTest.class

public void CanGoToLoginPage()
        {
            Pages.Home.Goto();
        }

这是非常糟糕的解决方案吗?