运行第二个@Test时出现TestNG.java.lang.NullPointerException

时间:2016-02-13 01:48:25

标签: selenium webdriver testng

它运行第一个测试OK,但是在运行"编辑配置文件"时,我得到一个空指针异常。测试,我不知道为什么。我全球宣布公共司机。

public class TestLogin
{

    public WebDriver driver;// = new FirefoxDriver();

    public String baseURL = "mytestsite.com";

    @BeforeTest
    public void setBaseURL()
    {
        driver = new FirefoxDriver();
        driver.manage().timeouts().implicitlyWait( 20L, TimeUnit.SECONDS );
        driver.get( baseURL );
    }

    // Login test
    @Test
      public void testLogin() throws InterruptedException{

      driver.manage().timeouts().implicitlyWait(20L, TimeUnit.SECONDS);

      analyticsLoginPage mylogin = PageFactory.initElements(driver,     `     `       analyticsLoginPage.class);
    analyticsLandingPage landingpage = mylogin.login("username", "password");
    Thread.sleep(3000);
   }

    // Edit Profile test

    @Test // (dependsOnMethods = { "testLogin" })
    public void verifyProfile()
        throws InterruptedException
    {
        // driver = new FirefoxDriver();

        Thread.sleep( 3000 );
        analyticsLandingPage landingpage = new analyticsLandingPage( driver );
        Thread.sleep( 3000 );
        landingpage.gotoProfile();

        // Thread.sleep(5000);
        analyticsEditProfilePage editprofile = PageFactory.initElements( driver, analyticsEditProfilePage.class );
        editprofile.verifyEditFirstName();
        editprofile.verifyEditLastName();
        editprofile.verifyCompanyName();
        editprofile.verifyReportingProfile();
        editprofile.verifyUsageStatistics();

}

着陆页类

package com.tapanalytics.pom.domain;

import java.util.concurrent.TimeUnit;

import javax.security.auth.login.Configuration;

import org.junit.Test;

public class analyticsLandingPage
{

    WebDriver driver;

    public analyticsLandingPage( WebDriver driver )
    {
        this.driver = driver;
    }

    @FindBy( xpath = Configuration.manage_dashboard )
    public WebElement manage_dashboard;

    @FindBy( xpath = Configuration.manage_services )
    public WebElement manage_services;

    @FindBy( xpath = Configuration.profile )
    public WebElement profile;

    @FindBy( xpath = Configuration.support )
    public WebElement support;

    @FindBy( xpath = Configuration.logout )
    public WebElement logout;

    public void gotoMangeDashboards()
    {
        manage_dashboard.click();
    }

    public void gotoServices()
    {
        manage_services.click();
    }

    public void gotoProfile()
    {
        profile.click();
    }

    public void gotoSupport()
    {
        support.click();
    }

    public void Logout()
    {
        logout.click();
    }

}

2 个答案:

答案 0 :(得分:0)

有多种方法可以解决这个问题。我认为您可以使用@BeforeMethod方法在每个测试方法之前初始化驱动程序,然后使用调用 driver.quit()@AfterMethod并将驱动程序设置为每个测试方法后都为null 。非静态驱动程序可以保持与类成员相同。

就个人而言,通过Selenium测试,我永远不会为多种测试方法重复使用相同的驱动程序。当你这样做时你会遇到麻烦,而你通常需要强制执行测试方法。

更高级:在数据提供程序中创建WebDriver实例,然后将其传递给每个测试方法。然后,有一个@AfterMethod,在每次测试后关闭驱动程序。然后,您的测试类不需要包含自己的共享驱动程序实例,TestNG会处理您的测试多线程。

答案 1 :(得分:-1)

尝试

public static WebDriver driver;

分为两类。

谢谢你, 穆拉利