selenium 初始化pageObject而不创建@BeforeMethod

zbwhf8kr  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(154)

学习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已将其标记为错误。

wgeznvg7

wgeznvg71#

问题出在

private HomePage homePage = new HomePage(driver);

必须理解静态和非静态变量的逻辑。
您已经在类级别上初始化了非静态HomePage对象。
在类加载之后,类的初始化发生,这意味着初始化类的所有静态成员。因此,非静态方法将不会得到初始化。
这里你并没有使用java的main方法进行执行,实际的执行是通过TestNG框架进行的。

**解决方案1:**将主页设为静态

private static HomePage homePage = new HomePage(driver);

**解决方案2:**初始化@BeforeClass或@BeforeTest注解上的非静态对象

public class HomePageTests extends BaseTest {
        private HomePage homePage;
    
        @BeforeClass
        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);
        } 
}

您的代码:https://github.com/mpaasternak/CeneoAutomation x1c 0d1x

相关问题