无法删除 Geb 和 Spock 测试中的 cookie

Impossible to delete cookies on Geb & Spock test

我正在使用 Geb (0.12.2) 和 Spock 定义一些规范来测试我的前端。 我的应用程序的登录系统依赖于我们内部 IDP 的 SSO。一旦我进入我的应用程序的私人部分,如果之前没有登录我们的 IDP,它将重定向到 IDP 主页,然后登录并再次将您重定向到最初询问的私人 url.

我需要随时注销。为此,我可以:

我希望初始化每个 GebSpec class,而无需任何先前的 cookie 或先前 GebSpec 执行的状态,并且不想依赖注销系统。 为此,我可以:

  1. 删除所有 cookie。
  2. 关闭浏览器(不想那样做)。

但是我遇到了两个问题。

1) 删除 cookie 如 http://www.gebish.org/manual/current/#implicit-driver-management 中所述,我尝试在 setup()setupSpec()cleanup()cleanupSpec() 方法中调用 clearCookies() 方法,但对 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 classes 中没有发生这种情况,既没有默认也没有强制发生。

我是否正在做任何事情来干扰这个假设的默认行为(不使用@Stepwise)或者我遗漏了什么?有人有同样的效果吗?

PS:我正在使用 BaseGepSpec 为我所有的 GebSpec classes 定义通用的 setup() 方法,并试图不以相同的结果进行扩展.我也在使用 GebReportingSpec 并尝试没有同样的效果......)

谢谢!

Browser.clearCookies() 只清除当前域的 cookie,这是浏览器工作方式的限制(您也只能在 javascript 中控制当前域的 cookie)以及 WebDriver does when you call deleteAllCookies(). To be fair, there is a ticket for making the docs clearer about what Browser.clearCookies() actually does.

要清除您的 IDP 域的 cookie,您需要先访问该域的任何 url,然后再调用 clearCookies()