【发布时间】:2015-12-30 08:39:06
【问题描述】:
我是新手,正在学习 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();
}
所以它非常简单明了。
【问题讨论】:
-
你可以这样做,但我建议你不要这样做。强烈。使用这样的静态方法感觉像是一个简单的解决方案,但它们是一条捷径,你最终会比你想象的更快地后悔。您将代码紧密耦合在一起,这很快就会变得非常有限制。
标签: java class selenium methods webdriver