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

时间:2019-02-11 18:38:28

标签: java maven selenium-webdriver

我正在尝试通过从Excel文件读取测试数据来添加新联系人。成功创建第一行数据。之后,对于第二行,我收到错误消息为“ org.openqa.selenium.NoSuchSessionException:会话ID为null。在调用quit()之后使用WebDriver吗?”

我已经重新检查了我的代码,发现其他测试用例工作正常。 我遵循以下流程 转到基本网址->登录->添加联系人-> driver.quit()

@AfterMethod
    public void teardown() {

        driver.quit();
    }

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

4 个答案:

答案 0 :(得分:0)

您在此处使用@AfterMethod,并且在每次执行该方法后都会执行@AfterMethod,在您的情况下,由于excel的作用,从excel进行一次迭代后,它会执行,而驱动程序实例也会终止,因为driver.quit()在这里。

因此,要解决此问题,您应该使用@AfterTest而不是@AfterMethod,因为@AfterTest仅在excel中的所有行都已执行并且测试用例执行完成时才运行

答案 1 :(得分:0)

您正在从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批注的生命周期,何时调用该批注。

这是最简单的示例:

enter image description here

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

答案 2 :(得分:0)

当您使用已经在上面调用过quit()或close()方法的驱动程序实例进行任何进一步的操作时,就会出现此错误。 只要确保在重新使用驱动程序实例之前重新初始化它即可。 在@AfterMethod中调用driver.quit()时,在@BeforeMethod中将驱动程序实例初始化为:

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

答案 3 :(得分:0)

使用:

@BeforeMethod

public void initialize() {


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

}

@AfterMethod

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

}