我正在使用 Geb (0.12.2) 和 Spock 定义一些规范来测试我的前端。 我的应用程序的登录系统依赖于我们内部 IDP 的 SSO。一旦我进入我的应用程序的私有(private)部分,如果之前没有在我们的 IDP 中登录,它将重定向到 IDP 主页,然后登录并再次将您重定向到最初要求的私有(private) url。
我需要随时退出。为了实现这一点,我可以:
- 注销。
- 删除 idp 设置的 cookie。
我希望初始化每个 GebSpec 类,而无需任何先前 GebSpec 执行中的 cookie 或状态,并且不想依赖注销系统。 为了实现这一点,我可以:
- 删除所有 Cookie。
- 关闭浏览器(不想这样做)。
但是我在两种方法上遇到了问题。
1) 删除cookie
正如 http://www.gebish.org/manual/current/#implicit-driver-management 中所述我尝试在 setup()
、setupSpec()
、cleanup()
中调用 clearCookies()
方法和 cleanupSpec()
方法对 cookie 没有影响(在浏览器中调试和检查 cookie,调用这些方法后不会删除任何内容)。
我正在从 IntelliJ 以及调用 gradlew 的命令行启动测试。
此外,如 http://www.gebish.org/manual/current/#cookie-management-in-tests 中所述:
The geb.spock.GebSpec class will clear the cookies in the cleanup() method unless the spec is @Stepwise, in which case they are cleared in cleanupSpec() (meaning that all feature methods in a stepwise spec share the same browser state).
这不会发生在我的 GebSpec 类中,也不会发生默认情况或强制情况。
我所做的任何事情是否会干扰这个假定的默认行为(不使用@Stepwise)或者我错过了什么?有人有同样的效果吗?
PS:我使用 BaseGepSpec 为所有 GebSpec
类定义通用 setup() 方法,并尝试不以相同的结果进行扩展。我还使用了 GebReportingSpec
并尝试了但没有达到相同的效果...)
谢谢!
最佳答案
Browser.clearCookies()
仅清除当前域的 cookie,这是浏览器工作方式的限制(您也只能在 javascript 中控制当前域的 cookie)以及 WebDriver does when you call deleteAllCookies()
。公平地说,有一个 ticket for making the docs clearer about what Browser.clearCookies()
actually does 。
要清除 IDP 域的 Cookie,您需要先访问该域的任何 URL,然后调用 clearCookies()
。
关于java - 在 Geb 和 Spock 测试中无法删除 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33914367/