我是新手,我正在学习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();
}
所以它非常简单明了。
答案 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();
}
这是非常糟糕的解决方案吗?