Selenium PageFactory放置在框架中

时间:2017-05-03 23:28:54

标签: selenium selenium-webdriver

目前我有以下类使用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类?任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

我发现最好的方法是使用Inversion Of Control / Dependency Injection框架。我使用Spring但也有其他选择,例如GuiceWeldPicocontainer

使用Spring,您可以使用@Component注释所有页面,并添加PageObject Bean后处理器以在创建页面时初始化所有页面元素。

Aslak Hellesoy(Cucumber Ltd创始人)Cucumber for Java Book也推荐了这种方法。黄瓜还提供