创建类对象的类
我是新手,我正在学习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(); }
这真是糟糕的解决方案吗?