PageFactory。如何分隔页面元素和步骤

时间:2015-04-22 15:52:53

标签: java testing selenium-webdriver factory pageobjects

我尝试使用PageFactory方法,并希望使用元素和方法来分隔类。例如,我有一个包含页面元素的类:

public class LoginPageElements extends AbstractPage  {

@FindBy(id = "rwOAuthUserName")
public WebElement login;

@FindBy(id = "rwOAuthPassword")
public WebElement password;

@FindBy(id = "rwOAuthLogin")
public WebElement submit;


public LoginPageElements (WebDriver driver){
    super(driver);
}

以及包含页面方法的类:

public class LoginPageSteps {

private LoginPageElements elements;

@Step
public void fillLogin(String value){
    elements.login.clear();
    elements.login.sendKeys(value);
}

@Step
public void fillPassword(String value){
    elements.password.clear();
    elements.password.sendKeys(value);
}

@Step
public void submitTheForm(String value) {
    elements.submit.click();
}

在上一页我导致访问我的登录页面并初始化所有必需元素的方法:

    public LoginPageElements clickLoginButton(){
        loginButton.click();
        return PageFactory.initElements(driver, LoginPageElements.class);
}

但问题是,我现在无法编写测试:

@BeforeTest
public void testSetUp(){
    driver = DriverManager.getDriverFor("FF");
    CNBLoginPage onCNBStartPage = PageFactory.
         initElements(driver, CNBLoginPage.class);
    onCNBStartPage.
            clickLoginButton().
            fillLogin(login).

由于clickLoginButton()返回LoginPageElements类,但fillLogin()在LoginPageSteps类中。

请告诉我如何正确返回元素和类?

1 个答案:

答案 0 :(得分:0)

只需在您的AbstractPage类的构造函数中添加PageFactory.initElements(driver, this);,就将像这样:

public AbstractPage (WebDriver driver){
    this.driver = driver;
    PageFactory.initElements(driver, this);
}

使用此方法,您将不再需要初始化扩展了AbstractPage的PageElement或初始化扩展了AbstractPage的其他类的任何其他类。

与此相关,您的@BeforeTest应该像:

@BeforeTest
public void testSetUp(){
    driver = DriverManager.getDriverFor("FF");
    LoginPageSteps steps = new LoginPageSteps(driver);
    steps.clickLoginButton();
    steps.fillLogin(login);