我正在尝试通过从Excel文件读取测试数据来添加新联系人。成功创建第一行数据。之后,对于第二行,我收到错误消息为“ org.openqa.selenium.NoSuchSessionException:会话ID为null。在调用quit()之后使用WebDriver吗?”
我已经重新检查了我的代码,发现其他测试用例工作正常。 我遵循以下流程 转到基本网址->登录->添加联系人-> driver.quit()
@AfterMethod
public void teardown() {
driver.quit();
}
我希望应该读取数据并添加多个联系人
答案 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批注的生命周期,何时调用该批注。
这是最简单的示例:
最佳实践是在@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();
}
}