比如说,我在一个班级里有两个小测试。
public class LoginAndLogout extends BaseTest {
HomePage kashome = new HomePage();
@Test(testName = "Login_as")
public void login() {
LoginPage loginkas = LoginPage.open(); //open login page
kashome = loginkas.login(name, pwd);
}
@Test
public void logOut() {
kashome.logOut();
}
}
主页类:
public class HomePage extends BasePage {
public HomePage() {
PageFactory.initElements(Driver.get(), this);
}
}
BasePage 类:
public class BasePage {
@FindBy(xpath="//img[@title='Выход']")
WebElement exitButton;
@FindBy (xpath="//a[text()='Выход']")
WebElement exitLink;
public BasePage() {
PageFactory.initElements(Driver.get(), this);
}
public boolean isLoggedIn(String usr) {
if (this.usernameText.getText().startsWith(usr)) return true;
else return false;
}
public void logOut() {
try {
exitLink.click();
Alert alert = Driver.get().switchTo().alert();
Reporter.log(alert.getText(), true);
Reporter.log("Отвечаем ОК", true);
alert.accept();
}
catch (UnhandledAlertException e) {
e.printStackTrace();
Reporter.log(e.getMessage(), true);
}
catch (Exception e) {
e.printStackTrace();
Reporter.log(e.getMessage(), true);
}
}
}
第一次测试运行正常,但在第二次测试中,我在尝试执行 exitLink.click() 时得到 NPE,似乎 kashome 中的元素没有初始化,但它们是!没有可能影响测试行为的 @AfterTest 方法。我检查了按钮的xpath,没关系。但是,如果我将 kashome.logOut() 添加到第一个测试并删除第二个测试,一切正常。
为什么我会得到 NPE?