Java 在TestNG中运行多个类

Java 在TestNG中运行多个类,java,selenium,testng,Java,Selenium,Testng,我正在尝试自动化一个场景,在这个场景中,我希望登录一次应用程序,然后进行操作,而无需再次登录 考虑到这一点,我有代码可以在特定类的@BeforeSuite方法中登录到应用程序 public class TestNGClass1 { public static WebDriver driver; @BeforeSuite public static void setUp(){ System.setProperty("webdriver.chrome.dr

我正在尝试自动化一个场景,在这个场景中,我希望登录一次应用程序,然后进行操作,而无需再次登录

考虑到这一点,我有代码可以在特定类的@BeforeSuite方法中登录到应用程序

public class TestNGClass1 {

    public static WebDriver driver;

    @BeforeSuite
    public static void setUp(){
        System.setProperty("webdriver.chrome.driver", "D://Softwares//chromedriver.exe");
        driver = new ChromeDriver(); 
        //driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("https://www.myfitnesspal.com");
    }

    @AfterSuite
    public static void close(){
        driver.close();
    }
}
我在TestNGClass2中有@test方法,它基本上尝试单击一些登录按钮

public class TestNGClass2 extends TestNGClass1 {

    public static WebDriver driver;

    @Test
    public static void login(){
        System.out.println("Entering the searchQuery Box");
        WebElement signUpWithEmailBtn = driver.findElement(By.xpath(".//*[@id='join']/a[2]"));
        System.out.println("srchTxtBox Box");
        signUpWithEmailBtn.click();
    }   
}
我有另一个类TestNGClass3,它有另一个@Test方法,需要在TestNGClass2完成后运行

public class TestNGClass3 extends TestNGClass1{

public static WebDriver driver;

    @Test
    public static void signIn(){
        WebElement emailAddress = driver.findElement(By.id("user_email"));
        emailAddress.clear();
        emailAddress.sendKeys("asdsa@gmail.com");
        WebElement password = driver.findElement(By.id("user_password"));
        password.clear();
        password.sendKeys("sdass");

        WebElement continueBtn = driver.findElement(By.id("submit"));
        continueBtn.click();
    }
}
testng.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Regression Test">
        <classes>
            <class name="com.test.TestNGClass2" />
            <class name="com.test.TestNGClass3" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

我的方法正确吗,因为当代码到达TestNGClass2的“login”方法时,我得到了空指针异常?

我认为您只需要在TestNGClass2和TestNGClass3中去掉这一行

您已经在基类TestNGClass1中存储了驱动程序,因此当您在其他类中有该行时,基本上隐藏了实例化的驱动程序


我也会考虑将基类访问修饰符更改为受保护的,因为您可能不希望类不是基类的子类来访问驱动程序。

public static WebDriver driver;