2015-10-02 2 views
1

Я новый, и я изучаю webdriver и java :) У меня есть вопрос начинающего.Класс, который создает объект классов

Я создал классы йота 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

Так как я могу написать это по-другому, я думаю, что это не смотрит хорошо ..

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

    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("[email protected]"); 

    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(); 

    ... 
    ... 
    ... 

Я inpired методом из моего поста до от https://www.youtube.com/watch?v=DO8KVe00kcU я думал, что это решение я должен использовать IM мои тесты

Я покажу U сейчас все части этого теста.

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(); 
     } 

Действительно ли это плохое решение?

Смежные вопросы