为什么我在测试中得到NullPointerException?

时间:2015-10-07 14:12:25

标签: java class selenium junit

我的测试套件分为两部分:测试数据库,WebElements的xpath位置,.click()命令等。我还有一个测试套件。

这是一个示例测试,它共享它为实验目的而处理的包。从右到右,我不担心输出结果(我知道该怎么做),代码只需要工作。

package LoginPage;

import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import org.openqa.selenium.*;

public class FunctionCheck {
      private WebDriver driver;
      private String baseUrl;

      @Before
      public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://www.XXXXXXXXXXX.com/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
      }
      @Test
      public void test() throws Exception {
        driver.get(baseUrl + "XXXXXXXXXXXX");
        Thread.sleep(600);
        LoginPage.enterValidCredentials myins = new LoginPage.enterValidCredentials();
        myins.run();
      }
      @After
      public void tearDown() throws Exception {
        driver.quit();
      }
}

这是位于同一个包中的“enterValidCredentials”类。

package LoginPage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

public class enterValidCredentials { // This class enters in a valid username and valid password on the login page.
    public void run() {
        WebDriver driver;
        driver.findElement(By.cssSelector("input[type=\"text\"]")).sendKeys("XXXXXX");
        driver.findElement(By.cssSelector("input[type=\"password\"]")).sendKeys("XXXXXX");    
    }
}

我遇到两个问题:

  1. 在“enterValidCredentials”类中,它要我“初始化”驱动程序变量。 Eclipse中的自动修复将第8行设置为WebDriver driver = null;
  2. 执行上述操作后,我的测试会抛出NullPointerException
  3. 我一直在搜索文档一段时间。我真的很难过是怎么回事。我想要的只是运行run()方法,并将信息插入页面。这就是目标。

3 个答案:

答案 0 :(得分:2)

public class enterValidCredentials {
  public void run(WebDriver driver) {
    driver.findElement(By.cssSelector("input[type=\"text\"]")).sendKeys("XXXXXX");
    driver.findElement(By.cssSelector("input[type=\"password\"]")).sendKeys("XXXXXX");    
  }
}

将现有的WebDriver个实例传递到enterValidCredentials.run

myins.run(driver);

答案 1 :(得分:1)

这是你的问题。 queryCompletionBlock未初始化。因为它是局部变量,编译器将要求您初始化它。正如你所说,当你将它初始化为null时,以下2行将其取消引用。你不能在一个没有任何指针的对象上调用方法。

driver

您必须为其指定一个值

            WebDriver driver;
            driver.findElement(By.cssSelector("input[type=\"text\"]")).sendKeys("XXXXXX");
            driver.findElement(By.cssSelector("input[type=\"password\"]")).sendKeys("XXXXXX");  

答案 2 :(得分:1)

尝试初始化您的驱动程序,如

private WebDriver driver=new FirefoxDriver();

配合,更好地使用调试)