首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NullPointerException模式运行测试时的PageObjects

使用NullPointerException模式运行测试时的PageObjects
EN

Stack Overflow用户
提问于 2015-08-23 19:56:08
回答 1查看 456关注 0票数 2

我试着找出答案,但这些都帮不了我。我肯定我错过了一个细节,但我不知道到底是什么。

我在运行测试用例时得到NullPointerException。我认为当我试图将驱动程序传递给我的页面对象(WikiMain)时会发生这种情况,该对象是从WebPage (超类)继承的,因为当我调试时,我注意到驱动程序= null。我是否应该将驱动程序传递给WebPage,因为其他页面是从它继承的?抱歉,我对这件事有点陌生,这是我在这个网站上的第一个问题。

下面是我的测试用例类:

代码语言:javascript
复制
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;

public class TestCase{

    public WebDriver driver;

    @BeforeTest
    public void setUp(){
        driver = new ChromeDriver();
    }

    @AfterTest
    public void tearDown(){
        driver.quit();
    }

    public WebPage getWikiMain(){
        driver.get("https://www.wikipedia.org/");
        return new WikiMain(driver);
    }
}

这是我的WebPage课程:

代码语言:javascript
复制
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;

public class WebPage{

    private WebDriver driver;

    public WebPage(WebDriver driver){
        this.driver = driver;
        initWebElements();
    }

    public void initWebElements(){
        PageFactory.initElements(driver, this);
    }
}

下面是WikiMain类:

代码语言:javascript
复制
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class WikiMain extends WebPage{

    private WebDriver driver;

    public WikiMain(WebDriver driver){
        super(driver);
    }


    public WebPage getWikiEn(){
        String linkToWikiEn = driver.findElement(By.xpath(".//*[@class= 'central-featured-lang lang1']/a")).getAttribute("href");
        driver.get(linkToWikiEn);
        return new WikiMainEn(driver);
    }
}

和WikiMainEn类:

代码语言:javascript
复制
package com.company.pages;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;


public class WikiMainEn extends WebPage{

    private WebDriver driver;

    public WikiMainEn(WebDriver driver){
        super(driver);
    }

    @FindBy(xpath = ".//*[@id='mp-topbanner']/tbody/tr/td[1]/table/tbody/tr/td/div[1]")
    private WebElement title;

    public WebElement getTitle(){
        return title;
    }

    public String getTitleText(){
        return getTitle().getText();
    }
}

和实际测试:

代码语言:javascript
复制
import com.company.pages.*;
import org.testng.Assert;
import org.testng.annotations.Test;


public class TestWikiMain extends TestCase{

    @Test
    public void verifyEnWiki() {

        WikiMain wikiMain = (WikiMain) getWikiMain();
        WikiMainEn wikiMainEn = (WikiMainEn) wikiMain.getWikiEn();
        Assert.assertTrue(wikiMainEn.getTitleText().contains("Welcome to"));
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-24 03:43:57

代码语言:javascript
复制
public class TestCase{
   public WebDriver driver;

   @BeforeTest
   public void setUp(){
       driver = new ChromeDriver();
   }

这里您已经声明了一个驱动程序并初始化了它。

代码语言:javascript
复制
public class WikiMain extends WebPage{

private WebDriver driver;

public WikiMain(WebDriver driver){
    super(driver);
}

另一个司机没有任何草签。所以当你跑到这里

代码语言:javascript
复制
 WikiMainEn wikiMainEn = (WikiMainEn) wikiMain.getWikiEn();

你在使用一个未初始化的驱动程序。因为您从未初始化过子类的(WikiMain)驱动程序。你刚刚初始化了WebPage.class的驱动程序。

在我看来,您可以设置网页的驱动程序,保护和删除子类之一。

代码语言:javascript
复制
 protected WebDriver driver;

移除

代码语言:javascript
复制
public class WikiMain extends WebPage{

 private WebDriver driver; //remove it
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32170875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档