在TestNG中运行多个类

我正在尝试自动化一个场景,其中,我想一次登录到应用程序然后进行操作而无需再次重新登录。

考虑一下,我有代码在特定类的@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文件如下:

             

我的方法是正确的,因为当代码到达TestNGClass2的’login’方法时,我得到“Null Pointer”exception?

我想你只需要在你的TestNGClass2TestNGClass3摆脱这一行

 public static WebDriver driver; 

您已经将driver存储在基类TestNGClass1 ,因此当您在其他类中拥有该行时,您基本上隐藏了实例化的那一行。

我还考虑将基类访问修饰符更改为protected因为您可能不希望不是该基类的子类的类访问该driver