Java 会话ID为空。调用quit()后使用WebDriver?

Java 会话ID为空。调用quit()后使用WebDriver?,java,maven,selenium-webdriver,Java,Maven,Selenium Webdriver,我试图通过读取和excel文件中的测试数据来添加新联系人。成功创建第一行数据。在第二行之后,我收到的错误是“org.openqa.selenium.NoSuchSessionException:会话ID为null。在调用quit()后使用WebDriver?” 我重新检查了代码,发现其他测试用例工作正常。 我遵循以下流程 转到基本url->登录->添加联系人->驱动程序。退出() 我希望应该读取数据并添加多个联系人您在这里使用的是@AfterMethod,并且@AfterMethod在每次执行该

我试图通过读取和excel文件中的测试数据来添加新联系人。成功创建第一行数据。在第二行之后,我收到的错误是“org.openqa.selenium.NoSuchSessionException:会话ID为null。在调用quit()后使用WebDriver?”

我重新检查了代码,发现其他测试用例工作正常。 我遵循以下流程 转到基本url->登录->添加联系人->驱动程序。退出()


我希望应该读取数据并添加多个联系人

您在这里使用的是
@AfterMethod
,并且
@AfterMethod
在每次执行该方法后都会执行,从excel进行一次迭代后,它将被执行,并且驱动程序实例将结束,因为您在此处使用了
driver.quit()


因此,为了解决这个问题,您应该使用
@postertest
而不是
@AfterMethod
,因为
@postertest
只有在excel中的所有行都被执行并且您的测试用例执行已经完成时才会运行。

您正在从excel读取数据,并且第一次遍历成功

第二次遍历将失败,因为@AfterMethod注释中的驱动程序调用已过期@AfterMethod注释将在每个@Test注释之后执行。在您的情况下,由于驱动程序在AfterMethod中过期,如果它进行进一步的@Test,那么它就失败了

在您的情况下,遍历如下所示:

如果有3个excel行:

@BeforeMethod(if applicable)
1st Row
@AfterMEthod

@BeforeMethod(if applicable)
2nd Row
@AfterMEthod

@BeforeMethod(if applicable)
3rd Row
@AfterMEthod
您需要了解TestNG注释的生命周期,该注释将在何时调用

这是最简单的例子:


在@AfterSuite注释中定义driver.quite()是最佳实践

当您使用驱动程序实例进行任何后续操作时,会出现此错误,您已经在该实例上调用了quit()或close()方法。 在再次使用之前,请确保重新初始化驱动程序实例。 正如您在@AfterMethod中调用driver.quit()一样,将@BeforeMethod中的驱动程序实例初始化为:

@BeforeMethod
    public void testMethodInitialize() {
        driver = new ChromeDriver();
    }
使用:

@预处理法

public void initialize() {


if(driver == null){
      //initialize your driver(webdriver or RemoteWebdriver)
      driver = new ChromeDriver();
    }
}

@后置法

public void teardown() {
   if(driver != null){
    driver.quit();
   }

}

请多发一些代码好吗?特别是调用driver.get()的部分。如果您已经回答了这个问题,请检查并让我知道这是否有帮助。我希望在从文件中读取一行后结束驱动程序实例,并且测试应该再次从登录开始。流量与预期一致。一旦AfterMethod被执行,BeforeMethod包含用于调用浏览器和流的代码,直到AddNewContactsPageOk得到您的场景,所以您可以通过使用@BeforeClass和AfterClass来实现这一点,所以请使用它们而不是BeforeMethod和AfterMethod,并让我知道这是否有效。
public void teardown() {
   if(driver != null){
    driver.quit();
   }

}