java selenium中的driver.close无法关闭多个登录会话

java selenium中的driver.close无法关闭多个登录会话,java,selenium-webdriver,memory-leaks,multiple-instances,Java,Selenium Webdriver,Memory Leaks,Multiple Instances,为了更加清晰,我添加了代码片段。 我正在使用java selenium testNG并尝试使用3个帐户登录zoho.com网站,并验证是否成功。我已经研究了一些类似的问题,但还没有找到一个适合我的解决方案 我在@BeforeMethod中实例化了ChromeDriver。然后我用第一个帐户登录网站,并用@AfterMethod关闭浏览器。 我必须用Driver=new ChromeDriver重新实例化浏览器,以便在实例关闭时使用新帐户重新登录,或者至少感觉到会话id不存在时出错 我的问题是驱动

为了更加清晰,我添加了代码片段。 我正在使用java selenium testNG并尝试使用3个帐户登录zoho.com网站,并验证是否成功。我已经研究了一些类似的问题,但还没有找到一个适合我的解决方案

我在@BeforeMethod中实例化了ChromeDriver。然后我用第一个帐户登录网站,并用@AfterMethod关闭浏览器。 我必须用Driver=new ChromeDriver重新实例化浏览器,以便在实例关闭时使用新帐户重新登录,或者至少感觉到会话id不存在时出错

我的问题是驱动程序的最后一个实例正在关闭,因为我在@AfterTest方法中有driver.quit。其他两个实例保留在内存中

我也尝试过在不关闭浏览器的情况下使用相同的实例,但在这种情况下,登录选项在特定网站上不可用,我随后的测试失败

下面是进一步澄清的代码

package uk.dev.test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.*;
import io.github.bonigarcia.wdm.WebDriverManager;

import java.util.concurrent.TimeUnit;

public class zohoLogin {

    WebDriver driver=null;
    String winHandleBefore;
  
    @DataProvider(name ="testData")
    public Object[][] loginPasswordData()
    {
    return new Object[][]{
        {"xxx@gmail.com",new String ("somepassword")} ,
        {"yyy@gmail.com",new String ("somepassword")},
        {"zzz@gmail.com",new String ("somepassword")},
    };
    }

    @Test ( dataProvider = "testData")
    public void enterUserDetails(String userEmail, String userPassword) throws InterruptedException {
        driver.findElement(By.xpath("//input[@id='login_id']")).sendKeys(userEmail);
        System.out.println(("Running for Test data " + userEmail));
        Thread.sleep(2000);
      
        driver.findElement(By.xpath("//button[@id='nextbtn']")).click();
        Thread.sleep(2000);
        System.out.println("clicked on Next");
        
findElement(By.xpath(//input[@id='password'])).sendKeys(userPassword); System.out.println(“输入密码”); findElement(By.xpath(//button[@id='nextbtn']///span[contains(text(),'Sign-in')])))。单击(); System.out.println(“点击登录”); 《睡眠》(2000年)

附加运行结果,其中可以看到2个chrome驱动程序实例。还请注意AfterMethod没有执行。

我在selenium中使用driver.quit()方法,但面临同样的问题。我认为这个问题与chromedriver的最新版本有关

public static void CloseDriver()
        {
            if (Driver != null)
            {
                Driver.Quit();
                Driver = null;
            }
        }

我甚至尝试过Driver.Kill(),但结果是关闭了所有浏览器。

只是为了澄清一下,AfterMethod会被执行,但taskmanagerSee中的chrome实例如下所示
public static void CloseDriver()
        {
            if (Driver != null)
            {
                Driver.Quit();
                Driver = null;
            }
        }