Geb 测试框架——获取原始页面内容
Geb Test Framework -- get raw page content
有没有办法使用 Geb 获取原始页面内容?
例如,下面的测试应该可以工作(但是 PhantomJS 似乎对 JSON 响应和 HTML 代码有问题):
def "Get page content example -- health check"() {
given:
go "https://status.github.com/api/status.json"
expect:
assert driver.pageSource.startsWith('{"status":"(good)"')
}
请注意,是的,我知道我不能使用 Geb,而只是在 Groovy 中调用 URL,但出于多种原因,我想明确使用 Geb (原因之一是处理重定向)。
Web 浏览器加载 URL 时呈现的内容取决于浏览器本身,您无能为力。 PhantomJS 使用与 Chrome 相同的引擎,因此它们两个在 JSON 周围渲染了一些 HTML。顺便说一下,IE、Edge 和 Firefox 也是这样做的。 HtmlUnit 换了一个纯渲染的JSON。但是,如果您可以只使用正则表达式,为什么还要费心像 startsWith
这样的精确匹配呢?它更灵活:
expect:
driver.pageSource =~ /"status":"good"/
这应该适用于所有浏览器引擎。
P.S.: then:
或 expect:
块中不需要 assert
,这就是 Spock/Geb.[=15= 的美妙之处]
有没有办法使用 Geb 获取原始页面内容?
例如,下面的测试应该可以工作(但是 PhantomJS 似乎对 JSON 响应和 HTML 代码有问题):
def "Get page content example -- health check"() {
given:
go "https://status.github.com/api/status.json"
expect:
assert driver.pageSource.startsWith('{"status":"(good)"')
}
请注意,是的,我知道我不能使用 Geb,而只是在 Groovy 中调用 URL,但出于多种原因,我想明确使用 Geb (原因之一是处理重定向)。
Web 浏览器加载 URL 时呈现的内容取决于浏览器本身,您无能为力。 PhantomJS 使用与 Chrome 相同的引擎,因此它们两个在 JSON 周围渲染了一些 HTML。顺便说一下,IE、Edge 和 Firefox 也是这样做的。 HtmlUnit 换了一个纯渲染的JSON。但是,如果您可以只使用正则表达式,为什么还要费心像 startsWith
这样的精确匹配呢?它更灵活:
expect:
driver.pageSource =~ /"status":"good"/
这应该适用于所有浏览器引擎。
P.S.: then:
或 expect:
块中不需要 assert
,这就是 Spock/Geb.[=15= 的美妙之处]