在一个单独的java类中初始化PageFactory一次

时间:2018-05-16 15:26:56

标签: java selenium-webdriver cucumber

我正在努力减少我的脚本中的冗长,遵循不要重复自己(DRY)编码练习。我偶然发现了一个挑战。我已经使用sefactory和黄瓜实现了基本测试。我将页面对象放在一个单独的BasePage类中,并在另一个Test类中初始化了pagefactory。初始化发生在每个方法中,测试按预期运行。

public class Test {
private static WebDriver driver;

public void navigateToUrl(String url) {
//Launch browser
}

public void firstLogin(String username, String Password) {
BasePage basePage = PageFactory.initElements(driver, BasePage.class); //Initialisation
basePage.usernameField.click();
basePage.passwordField.sendKeys("pwd");
}

public void secondLogin()  {
BasePage basePage = PageFactory.initElements(driver, BasePage.class); //Initialisation
basePage.myIdField.click();
basePage.myPasswordField.click();    
}

我正在尝试增强脚本。我想初始化pagefactory一次,也许是在类级别,而不是在每个方法中初始化,所以,我从所有方法中取消了初始化并在类级别声明了一次:

public class Test {
private static WebDriver driver;
BasePage basePage = PageFactory.initElements(driver, BasePage.class); //Initialisation

我得到了一个nullpointerException。

我也试过这个,把初始化放在一个设置方法中:

public class Test {
private static WebDriver driver;
private static BasePage basePage;

@BeforeMethod
public void setUp() {
basePage = PageFactory.initElements(driver, BasePage.class);
}

仍然,它导致了Nullpointer

我的BasePage标题如下所示:

public class BasePage {
private final WebDriver driver;

public BasePage(WebDriver driver) {
   this.driver = driver;
  }

我不仅多次初始化,而且还在basePagefirstLogin方法的每一行中使用secondLogin变量。我不知道是否有方法,但如果有人可以建议或提供意见,那将会有所帮助。感谢。

0 个答案:

没有答案