0

我在测试 Grails 应用程序的身份验证时遇到了问题。浏览器似乎不接受 cookie,所以我创建了一个简单的 grails 应用程序作为测试。

<html>
<head>
    <title>Welcome to Grails</title>
</head>
<body>
    <g:each in="${request.cookies}">
       <h1>${it.name} = <span class="value">${it.value}</span></h1>
    </g:each>

    <span class="value">test test</span>
</body>

和我的 Geb 测试:

import spock.lang.Stepwise;
import geb.Page;
import geb.spock.GebReportingSpec


@Stepwise
class LoginSmokeTests extends GebReportingSpec {
 String getBaseUrl() {
  return "http://localhost:8080/test123/"
 } 

 def "testing stuff"() {
  given:
   to HomePage
  when:
   println header

  then: 
   at HomePage
 }  
}



class HomePage extends Page {
 static at = { title == "Welcome to Grails" }

 static content = {
  header { $("span.value").first().text() }
 }
}

当我通过浏览器查看时,会打印 2 个 cookie 的值。通过我的 Geb 测试访问它时,<span class="value">test test</span>会提取 HTML - 因为请求中没有要迭代的 cookie。

我已经对如何使用 Geb + cookie 进行了一些搜索,但由于它是相对较新的软件,那里似乎没有太多信息(尽管它的手册很棒)。

为每个测试方法创建一个新的浏览器实例 然而,由于默认行为是跨浏览器实例重用默认驱动程序,驱动程序的 cookie 在 Spock cleanup() 方法中被清除。但是,如果您的规范是逐步的(即使用 @spock.lang.Stepwise 注释 - 有关详细信息,请参阅 Spock 文档),则 cookie 不会在 cleanup() 中清除,但会在 cleanupSpec() 中清除,这意味着浏览器状态不会在测试之间重置方法(这对于逐步规范是有意义的)。

而且,我只执行一种测试方法——但没有发送任何 cookie。有任何想法吗?

4

1 回答 1

6

因为这是您的第一个请求,所以浏览器不会有任何 cookie,因为服务器没有发送任何 cookie。

如果您执行后续请求,您应该会看到 cookie。

于 2010-12-13T03:17:03.913 回答