使用eclipse运行TestNg测试组时出现NPE错误

时间:2015-11-30 00:18:09

标签: nullpointerexception testng

我正在尝试通过右键单击TestNG.xml作为测试套件来运行TestNG中的测试组并获得低于错误。

java.lang.NullPointerException
at execution_Engine.TestCase1_Login.Login(TestCase1_Login.java:54)

注意:当我自己运行测试(而不是测试套件)时,它运行正常。

有人能够善意地指出问题是什么吗?并解决了这个问题。

的testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke tests">
<test name="regressions Test Suite">
    <groups> 
        <run> 
            <include name="Regression"/> 
        </run> 
    </groups> 
    <classes> 
        <class name="execution_Engine.TestCase1_Login"/> 
        <class name="execution_Engine.TestCase2_InvalidLogin"/>
    </classes>
            <packages>
        <package name="execution_Engine" />
        </packages> 
</test>
</suite>

@SuppressWarnings("unused")
public class TestCase1_Login  {

public static WebDriver driver = null;

 @BeforeMethod
  public static void LaunchIEandNavigate() {  

      /*** Launch IE **/ 
    System.setProperty "webdriver.ie.driver", "C:\\IE\\IEDriverServer.exe");
      driver = new InternetExplorerDriver();

      /*** implicit Wait **/
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

      /*** Navigate to URL **/
      driver.get("http://google.com");



@Test(enabled = true, groups = "Regression")
public void Login() {

       /*** Login Action  **/
       driver.findElement(By.id("UserId")).sendKeys("DummyUser"); Line 54
       driver.findElement(By.id("Password")).sendKeys("password");
       driver.findElement(By.id("Submit-button")).click();

   System.out.println("Testcase1 - ValidLogin executed sucessfully.");

}

@AfterMethod
public void CloseIEandQuit() {
//driver.switchTo().defaultContent();   
  /** Close and quit browser*/
  driver.close();
  driver.quit();

}

4 个答案:

答案 0 :(得分:3)

只需将(alwaysRun = true)添加到@BeforeMethod注释。

答案 1 :(得分:1)

问题:

如何在带有扩展报告的POM中使用分组概念时解决NULLPOINTEREXCEPTION

解决方案:

  1. 将以下参数用于我们在基础测试中使用的所有配置注释;     (alwaysRun = true)
  2. 在页面类中使用有效的try catch块,不要使用throws [不正确的异常]
  3. 使用参数化的值,而不是在页面或脚本内获取硬编码值。

答案 2 :(得分:1)

要添加到上述答案,请在您正在使用的所有注释中添加(alwaysRun = true)。我有@BeforeClass和@BeforeMethod一起注释。因此,将(alwaysRun = true)添加到构成测试一部分的所有注释中。

  @Parameters("browser")
  @BeforeClass(alwaysRun=true)
  public void setupDriver(String browser) 
  {
      application=new SSC_NewUserRegisteration(browser);

  }

  @BeforeMethod(alwaysRun=true)
  public void launchApplication() 
  {
      application.app_launchApplication();
  }


  @Test(priority=1, groups = {"Valid Data"})
  public void submitWithAadharDetails() 
  {
      application.app_setTestData(1);

      application.app_fillNewUserRegisterationDetails();

      application.app_submitData();
  }

答案 3 :(得分:0)

根本原因是您还必须在 before 方法中或在 class 或 alwaysRun 之前添加组。