当前位置: 首页 > 知识库问答 >
问题:

Java中的driver.close没有关闭多个登录会话-Selenium

空夕
2023-03-14

为了进一步清晰,我添加了代码段。我正在使用Java Selenium-testng并尝试用3个帐户登录到一个网站zoho.com并验证是否成功。我已经看过一些类似的问题,但还没有找到一个解决方案,适用于我的情况。

我在@BeforeMethod中实例化了ChromeDriver。然后用first帐号登录网站,用@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");
        

driver.findElement(by.xpath(“//input[@id='password']”)).sendkeys(userPassword);system.out.println(“输入密码”);driver.findElement(by.xpath(“//button[@id='nextbtn']//span[contains(text(),'signin')]”)).click();system.out.println(“单击登录”);Thread.Sleep(2000);

    }


    @BeforeMethod
    public void loginZoho() throws InterruptedException
    {
          driver = new ChromeDriver();
        driver.get("https://www.zoho.com");

        System.out.println("Open the browser");
        driver.findElement(By.xpath("//a[@class='zh-login']")).click();
         //driver.manage().timeouts().implicitlyWait(5000, TimeUnit.MILLISECONDS);
         Thread.sleep(5000);

    }
   @AfterMethod
   public void closeBrosers() throws InterruptedException {

       Thread.sleep(2000);
       driver.close();

       System.out.println("Close the browser");

   }

    @BeforeTest
    public void setupBrowser()
    {     WebDriverManager.chromedriver().setup();

    }

    @AfterTest
    public void tearDown()
    {
         driver.quit();
    }

}

附上了运行结果,可以看到2个chrome驱动程序实例。同时注意AfterMethod没有被执行。在此输入图像说明

共有1个答案

都超英
2023-03-14

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

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

我甚至尝试了driver.kill(),但结果关闭了所有浏览器。

 类似资料:
  • 问题内容: 如果我想使用Web应用程序跟踪与每个客户端的对话状态,那么哪个更好的替代方法是使用Session Bean还是HTTP Session? 使用HTTP会话: 使用会话EJB: 在执行ServletContextListener时注册为Web应用程序侦听器: 在JSP中: 同一JSP正文中的其他地方: 在我看来,它们几乎是相同的,主要区别在于UserState实例是在前者中传输的,而在后

  • 问题内容: 要获得答案,请向下滚动到此内容的结尾… 基本问题与多次询问相同。我有一个带有两个POJO事件和用户的简单程序-一个用户可以拥有多个事件。 用户: 注意:这是一个示例项目。我 真的 很想在这里使用Lazy抓取。 现在我们需要配置spring和hibernate,并有一个简单的basic-db.xml用于加载: 注意:我玩过CustomScopeConfigurer和SimpleThrea

  • 我有一个问题,如果我的服务上有一个客户端调用两个方法,它就会失败,因为第二个方法中的事务没有与之关联的会话。但是,如果我将这两种方法组合到服务中,并从客户机代码中调用其中一种方法,它就会成功。 谁能给我解释一下为什么会这样? 考虑下面的代码: 所以这里发生的事情是,在我的客户机代码中(它不知道事务),如果我调用#getChildrenFor(id),我就没事了。但如果我打电话: 然后hiberna

  • 在对PDF文档进行数字签名后,我在Apache PDFBox中关闭了PDF文档。我收到警告:

  • 我们使用Hibernate(JPA)和Hibernate Envers来保存对象的历史。Web应用程序运行许多线程,其中一些是通过从其他应用程序调用RMI方法创建的,其中一些是由应用程序本身创建的,其中一些是为了处理超文本传输协议请求而创建的(它们生成视图)。 我们还使用视图中的开放会话模式来管理会话,因此我们的web。xml包含: 数据库是使用DAO访问的,它们都有由Spring注入的实体管理器

  • 问题内容: 要获得答案,请向下滚动到此内容的末尾… 基本问题与多次询问相同。我有一个带有两个POJO事件和用户的简单程序-一个用户可以拥有多个事件。 用户: 注意:这是一个示例项目。我 真的 很想在这里使用Lazy抓取。 现在我们需要配置spring和hibernate,并有一个简单的basic-db.xml用于加载: 注意:我玩过CustomScopeConfigurer和SimpleThrea