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