繁体   English   中英

将驱动程序/对象传递给其他页面/类-java.lang.NullPointerException

[英]Passing driver/object to other page/class - java.lang.NullPointerException

我无法将驱动程序/对象传递给下一个类/页面,并且在第一个/开始类中具有相同的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()-FAILS(NullPointerException)和changeCurrency()PASS。 我不知道为什么如果这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”声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM