Geb功能性网络测试+ cookies

Ste*_*oat 0 groovy selenium webtest htmlunit

我在测试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>
Run Code Online (Sandbox Code Playgroud)

和我的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() }
 }
}
Run Code Online (Sandbox Code Playgroud)

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

我已经做了一些关于如何使用Geb + cookies的搜索,但由于它是相对较新的软件,因此似乎没有太多的信息(虽然它的手册很棒).

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

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

小智 6

因为这是您的第一个请求,浏览器将不会有任何cookie,因为服务器尚未发送任何cookie.

如果您进行后续请求,您应该看到cookie.