我的测试需要验证何时保存登录信息并关闭浏览器并重新打开,然后这些凭据保留并保存在新会话中。因此,我想关闭当前会话并重新打开它,以验证cookie是否仍保留在页面上,但是Selenium删除了所有存储的会话数据,因此测试用例将始终失败。关闭特定测试用例的浏览器后,是否有任何方法可以防止Selenium删除存储的会话数据?
当我运行它时,不会出现此类会话错误。
#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
评论
如果您正在测试“记住我”功能,则可以删除所有非持久性Cookie并重新加载页面以模拟浏览器重启。