学习POM在 selenium 中的作用并试图理解这种行为。当我这样设置我的测试类时:
public class HomePageTests extends BaseTest {
private HomePage homePage;
@BeforeMethod
public void setupTest() {
homePage = new HomePage(driver);
}
@Test
public void checkPageTitleTest() {
//act
homePage.clickOnMainPageIconButton();
//get
String pageTitle = homePage.getMainPageTitle(driver);
//verify
assertThat(pageTitle).isEqualTo(HOME_PAGE_TITLE);
}
}
一切似乎都在按预期工作。然而,当我试图创建没有@BeforeMethod
public class HomePageTests extends BaseTest {
private HomePage homePage = new HomePage(driver);
@Test
public void checkPageTitleTest() {
//act
homePage.clickOnMainPageIconButton();
//get
String pageTitle = homePage.getMainPageTitle(driver);
//verify
assertThat(pageTitle).isEqualTo(HOME_PAGE_TITLE);
}
}
我总是收到此错误:java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.SearchContext.findElement(org.openqa.selenium.By)" because "this.searchContext" is null
我的主页如下所示:
public class HomePage extends BasePage{
public HomePage(WebDriver driver) {
super(driver);
}
@FindBy(className = "header__logo__link")
WebElement mainPageLogo;
public void clickOnMainPageIconButton(){
mainPageLogo.click();
}
public String getMainPageTitle(WebDriver driver){
return driver.getTitle();
}
}
我可以做些什么来摆脱这个重复的块@BeforeMethod
。链接到我的current repository与项目,如果我错过了一些可能是至关重要的描述问题。
尝试在HomePage中创建初始化类,但IDE已将其标记为错误。
1条答案
按热度按时间wgeznvg71#
问题出在
必须理解静态和非静态变量的逻辑。
您已经在类级别上初始化了非静态HomePage对象。
在类加载之后,类的初始化发生,这意味着初始化类的所有静态成员。因此,非静态方法将不会得到初始化。
这里你并没有使用java的main方法进行执行,实际的执行是通过TestNG框架进行的。
**解决方案1:**将主页设为静态
**解决方案2:**初始化@BeforeClass或@BeforeTest注解上的非静态对象
您的代码:https://github.com/mpaasternak/CeneoAutomation x1c 0d1x