创建类对象的类

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

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

 HomePage LoginPage ... 

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

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

我想这样做:

 HomePage.loginButton.click() 

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

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

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

 public static class Pages { private static T GetPage() where T : new() { var page = new T(); PageFactory.InitElements(Browser.Driver, page); return page; } public static AboutPage About { get { return GetPage(); } } public static TopNavigationPage TopNavigation { get { return GetPage(); } } public static HomePage Home { get { return GetPage(); } } public static ContactPage Contact { get { return GetPage(); } } public static RegisterPage Register { get { return GetPage(); } } public static LoginPage Login { get { return GetPage(); } } public static ManageAccountPage ManageAccount { get { return GetPage(); } } 

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

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

所以它非常简单明了。

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

 /*------------------------------------------------------------------------*/ 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(); ... ... ... 

我的post来自我之前发布的https://www.youtube.com/watch?v=DO8KVe00kcU,我认为这是一个解决方案我应该使用我的测试

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

Pages.class

 public static class Pages { private static T GetPage() where T : new() { var page = new T(); PageFactory.InitElements(Browser.Driver, page); return page; } ** public static LoginPage Login { get { return GetPage(); } }** public static AboutPage About { get { return GetPage(); } } public static TopNavigationPage TopNavigation { get { return GetPage(); } } ... } 

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

这真是糟糕的解决方案吗?