java - 在 Geb 和 Spock 测试中无法删除 cookie

标签 java cookies spock geb

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

我需要随时退出。为了实现这一点,我可以:

  • 注销。
  • 删除 idp 设置的 cookie。

我希望初始化每个 GebSpec 类,而无需任何先前 GebSpec 执行中的 cookie 或状态,并且不想依赖注销系统。 为了实现这一点,我可以:

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

但是我在两种方法上遇到了问题。

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/

相关文章:

java - 语法问题 - 扩展实现接口(interface)的抽象类

java - 通过 Volley 设置登录 session Cookie

grails - 如何在grails中测试基于参数的重定向

java - 如何更新 HBase 中的现有列值

java - JVM 忽略证书名称不匹配

javascript - Nodejs Express3 使用 session 检查用户是否登录

javascript - 让元素在悬停时悬停,添加关闭按钮以便它记住cookie?

java - Spock 单元测试,常规左移赋值抛出 SpockExecutionException : Data provider has no data

grails - 在运行测试用例时,为属性指定了不存在的映射属性[none]

java - 以编程方式使用 java 重命名 JKS 别名