4 回答
TA贡献1851条经验 获得超3个赞
当您使用已调用 quit() 或 close() 方法的驱动程序实例进行任何进一步操作时,会出现此错误。只需确保在再次使用之前重新初始化驱动程序实例。正如您在 @AfterMethod 中调用 driver.quit() 一样,将 @BeforeMethod 中的驱动程序实例初始化为:
@BeforeMethod
public void testMethodInitialize() {
driver = new ChromeDriver();
}
TA贡献1798条经验 获得超7个赞
您在@AfterMethod
这里使用并@AfterMethod
在每次执行该方法后执行,在您的情况下,在从 excel 进行一次迭代后,它会被执行,并且驱动程序实例会因为您在driver.quit()
这里使用而结束。
因此,要解决这个问题,您应该使用@AfterTest
而不是@AfterMethod
as@AfterTest
将仅在 excel 中的所有行都被执行并且您的测试用例执行完成时才运行。
TA贡献1841条经验 获得超3个赞
您正在从 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()。
TA贡献1825条经验 获得超6个赞
利用 :
@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();
}
}
添加回答
举报