我无法将驱动程序/对象传递给下一个类/页面,并且在第一个/开始类中具有相同的NullPointerException。

PageObject类-SearchResultsPage:

public class SearchResultsPage extends BasePage{

    @FindBy(xpath = "//*[@data-original-title=\"Compare this Product\"]")
    List <WebElement> compareButton;

    @FindBy(partialLinkText = "Product Compare")
    WebElement urlComparePage;

    public SearchResultsPage(WebDriver driver) {
        super(driver);
        PageFactory.initElements(driver, this);
    }
    public void compareItems(){
        for(WebElement compareButtons: compareButton){
            compareButtons.click();
        }
    }

    public void goToComparePage(){
        urlComparePage.click();

    }
}


PageObject类的HomePage:

public class HomePage extends BasePage{

    public HomePage(WebDriver driver) {
        super(driver);
        PageFactory.initElements(driver, this);
    }
    public String PAGE_TITLE = "Your Store";
    WebDriver driver;
    @FindBy(className = "input-lg")
    WebElement inputSearch;
    @FindBy(className = "btn-lg")
    WebElement searchButton;

    public void isHomePage(){
        String pageTitle = driver.getTitle();
        Assert.assertEquals(pageTitle, PAGE_TITLE);
    }

    public void inputIntoSearch(){
        String itemName = "ipod";
        inputSearch.sendKeys(itemName);
    }

    public  SearchResultsPage clickSearchButton(){
        searchButton.click();
        return PageFactory.initElements(driver, SearchResultsPage.class);
    }
}


测试类别:

public class MainPage {
    HomePage hp;
    TopNavigation topNav;
    ComparePage cp;
    SearchResultsPage srp;

    @BeforeTest
    public void setUp(){
    WebDriver driver = new FirefoxDriver();
    driver.get("http://demo.opencart.com/");
    driver.manage().window().maximize();
    hp =  PageFactory.initElements(driver, HomePage.class);
    topNav = PageFactory.initElements(driver, TopNavigation.class);
    cp = PageFactory.initElements(driver, ComparePage.class);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    }

    @Test(priority = 0)
    public void checkIsHomePage(){
        hp.isHomePage();
    }

    @Test
    public void changeCurrency(){
        topNav.clickButtonChangeCurrency();
        topNav.setCurrency();
    }
    @Test
    public void searchProducts(){
        hp.inputIntoSearch();
        hp.clickSearchButton();
    }
    @Test
    public void addToCompare(){
        srp.compareItems();
    }
}


我有两个问题:

1.当我运行测试checkIsHomePage()-失败(NullPointerException)
和changeCurrency()通过。我不知道为什么如果这2个方法在同一PageObiect类-HomePage中,则第一个测试失败。怎么了?

2.当searchProduct方法通过时,我想使用addToCompare()比较产品,但是我不知道如何使用PageFactory.initelements在带有搜索结果的页面上进行测试。我应该怎么做?

- - - - - - - - - - - - - - - - - - - -更新 - - - - - ------------------
好的,我怀疑它为什么不起作用的原因。因为它是基类(BasePage)。我做到了,并使用PageObjest以及构造函数和super(driver)扩展了所有类。当我删除PageObject类中的“ extends”和“ super”并使用(this.driver = driver)时,它现在正在工作。但是我用这个基类做了些什么呢?

- - - - - - - - - - - - - - - - - - - - - - -更新 - - ---------------------------
我的BasePage现在很差:

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


}

最佳答案

根本的问题是HomePage显然是要遵从BasePage的(尽管您在代码段中也称它为MainPage):它的构造函数将WebDriver实例传递给super(),但是它有自己的实例WebDriver driver成员变量永远不会设置,并且在调用isHomePage()时将为null。相反,您应该使用父类中的WebDriver实例,并从子类中删除“ masking”声明。

关于java - 将驱动程序/对象传递给其他页面/类-java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35103597/

10-09 04:57