使用 WatiN 使 IE 会话过期

Posted

技术标签:

【中文标题】使用 WatiN 使 IE 会话过期【英文标题】:Expiring an IE session using WatiN 【发布时间】:2012-01-09 21:12:37 【问题描述】:

我正在尝试使用 WatiN 编写验收测试,以检查用户是否在会话超时后导航到某个页面时被重定向到登录页面。我正在为浏览器使用 WatiN 的 IE 类,并尝试以下操作:

// 1. Login

// 2. Do this:
Browser.ClearCookies();
Browser.ClearCache();

// 3. Navigate to a different page

但用户始终处于登录状态。其他信息:

    我正在通过以管理员身份运行的 NUnit GUI 运行测试 这是一个 ASP.NET MVC 3 站点,使用表单身份验证和进程内会话状态 我使用的是 IE9。 如果我在 Chrome 中手动清除所有 cookie,用户将退出 如果我手动清除 IE 中的所有 cookie,用户将保持登录状态 如果我在 IE 中调用 Browser.Eval("alert(document.cookie)");,它会提示一个空字符串

鉴于上述情况,我假设这是 IE 的一个怪癖;有什么想法可以解决吗?

【问题讨论】:

【参考方案1】:

原来这是由于 IE 处理会话的方式和身份验证 cookie 的删除;我发现埋在this blog中,你可以通过让WatiN执行以下javascript来清除IE中的身份验证信息:

Browser.Eval(@"document.execCommand(""ClearAuthenticationCache"", false);");

这行得通!执行此行后,会话被清除,下一页导航重定向到登录屏幕。

【讨论】:

这确实有效,但是我们发现它可能会导致后续 Browser.Eval 调用出现问题。通过我们的测试,代码:Browser.Eval("1") 在清除缓存调用之前返回“1”,但在相同的 Eval 请求返回“[object Document]”之后。只是需要注意的事情。 感谢您的提醒,亚伦! :)【参考方案2】:

我看了一圈,发现了这个页面:http://fwdnug.com/blogs/ddodgen/archive/2008/07/03/watin-api-clearcookies.aspx

本质上说WaTiN没有权限在IE中删除cookies,所以ClearCookies方法不起作用。我只是将您的身份验证 cookie(我认为默认值为 ASP.NET_SessionId)设置为空,看看是否有效。

【讨论】:

该页面声明“使用 ClearCookies 进行此测试将失败”,但这不是我所看到的。我正在通过以管理员身份运行的 NUnit GUI 运行测试,所以也许可以解决这个问题? document.cookie 是空白的,手动清除 IE 浏览器中的 cookie 并不会让我退出,所以我不确定是不是这样。

以上是关于使用 WatiN 使 IE 会话过期的主要内容,如果未能解决你的问题,请参考以下文章

WebDriver 2.0:如果 IE (IE8) 的实例已经存在,则弹出窗口的会话过期错误

如何使 PHP 中的用户会话过期?

使会话 cookie 在 2 年内过期

如何防止会话在顶点过期?

ASP.NET CORE 2.2 WEB APP中的会话过期问题

如何创建将在 Symfony2 中过期/销毁会话的命令控制台?