我在Java中使用Selenium Webdriver。

我的测试需要验证何时保存登录信息并关闭浏览器并重新打开,然后这些凭据保留并保存在新会话中。因此,我想关闭当前会话并重新打开它,以验证cookie是否仍保留在页面上,但是Selenium删除了所有存储的会话数据,因此测试用例将始终失败。关闭特定测试用例的浏览器后,是否有任何方法可以防止Selenium删除存储的会话数据?

当我运行它时,不会出现此类会话错误。

评论

如果您正在测试“记住我”功能,则可以删除所有非持久性Cookie并重新加载页面以模拟浏览器重启。

#1 楼

好吧,我相信关闭浏览器后就无法防止删除会话数据。但是,您可以存储第一个实例的cookie,并使用driver.manage().getCookies()方法将其复制到新实例。

在测试中调用driver.close()方法之前,请确保使用以下代码保存这些cookie :

Set<Cookie> allCookies = driver.manage().getCookies();


上面的allCookies变量可以根据需要定义全局变量。

因此对于下一个实例,在测试开始时请使用下面的代码:

driver = new FirefoxDriver();
for(Cookie cookie : allCookies)
{
    driver.manage().addCookie(cookie);
}


现在,这会将之前存在的所有cookie复制到此会话中,因此在此之后,将根据您的要求进行进一步的逻辑处理。

评论


这显然不适用于带有HttpOnly标志的cookie:stackoverflow.com/questions/15952262/…

– dzieciou
16-3-13在12:44

getCookies()仅返回当前域的cookie,而addCookie()仅允许添加与当前URL的域相同域的cookie。因此,在获取或设置Cookie时,首先转到正确的URL很重要。

– dzieciou
16-3-13在12:46



谢谢@dzieciou。我最初是在完全没有加载任何页面之前尝试执行此操作(关于:空白),这导致了异常

–gorbysbm
19年5月14日在21:31

关于如何在chrome C#(Visual Studio)中执行此操作的任何想法?谢谢

–迭戈·科尔特斯(Diego Cortes)
20-3-14在7:37

#2 楼

好了,一旦关闭特定实例,Web驱动程序实例的会话就结束了。因此,您无法在新实例中访问上一个实例的会话。但是,您仍然可以通过将会话值存储在变量中,然后将会话添加到新实例中来实现会话。请看下面提到的代码以更好地理解:

public void useStoredSessionInNewWindow() {
 // initiate web driver and go to an website
 _webDriver = new FirefoxDriver();
 _webDriver.navigate().to("www.abc.com");

 // add code to login in the website

 // store the current session
 Set<Cookie> cookiesInstance1 = _webDriver.manage().getCookies();
 System.out.println("Cookies = "+cookiesInstance1);

 // close the web driver instance
 _webDriver.close();

 // again initiate web driver and go to the same website. This will open the login page
 _webDriver = new FirefoxDriver();
 _webDriver.navigate().to("www.abc.com");

 // add the stored session in the bew web driver instance
 for(Cookie cookie : cookiesInstance1)
 {
  _webDriver.manage().addCookie(cookie);
 }

 // re-visit the page
 _webDriver.navigate().to("www.abc.com");

 // get the current session of new web driver instance
 Set<Cookie> cookiesInstance2 = _webDriver.manage().getCookies();
 System.out.println("Cookies = "+cookiesInstance2);

 // notice that session of previous web driver instanse is achieved
 Assert.assertEquals(cookiesInstance1, cookiesInstance2);

 }


希望有帮助:)

#3 楼

您可以尝试使用隐式指定的配置文件路径-这样,当您关闭浏览器时,浏览器在实际情况下本应保存的所有数据仍会保存。

options.addArguments("--user-data-dir=" + PROFILE_PATH);


评论


仅仅指定配置文件路径是不够的。

–ufk
20-2-18在15:12