目前我有以下类使用PageFactory来初始化我使用的元素。
基类:
public class BaseClass {
public static WebDriver driver;
public static boolean bResult;
public BaseClass(WebDriver driver){
BaseClass.driver = driver;
BaseClass.bResult = true;
}}
登录页面包含元素的类:
public class LoginPage extends BaseClass{
public LoginPage(WebDriver driver)
{
super(driver);
}
@FindBy(how= How.XPATH, using="//input[@placeholder='Username']")
public static WebElement username;
然后我为我的操作使用单独的Login类:
public class Login {
//Login
public static void enterUsernamePassword(String username, String password) throws Exception{
LoginPage.username.sendKeys(username);
LoginPage.password.sendKeys(password);
}
然后我的步骤类:
@When("^I enter a valid username (.*) and password (.*)")
public void I_enter_a_valid_username_and_password(String username, String password) throws Throwable
{
PageFactory.initElements(driver, LoginPage.class);
Login.enterUsernamePassword(username, password);
}
正如您所看到的,我在steps类中使用了PageFactory。我讨厌这样做,并希望将PageFactory放在其他地方,而不是在步骤类中。
如果不添加或删除任何类,我可以在哪里放置PageFactory类?任何帮助,将不胜感激。
答案 0 :(得分:0)
我发现最好的方法是使用Inversion Of Control / Dependency Injection框架。我使用Spring但也有其他选择,例如Guice,Weld,Picocontainer。
使用Spring,您可以使用@Component
注释所有页面,并添加PageObject Bean后处理器以在创建页面时初始化所有页面元素。
Aslak Hellesoy(Cucumber Ltd创始人)Cucumber for Java Book也推荐了这种方法。黄瓜还提供