5 利用 Geb 进行功能测试
Geb 是一种功能性的 Web 测试及抓取库,可以完美地与 JUnit 和 Spock 集成。它基于 Selenium Web 驱动,像 Spock 一样,它也能提供 Groovy DSL 来编写 Web 应用的功能测试。
以下这些功能使其成为一种非常好的功能测试库:
- 通过 jQuery 语句(比如
$
函数)进行 DOM 访问; - 实现页面模式;
- 支持特定 Web 组件(比如菜单栏)的模块化
- 通过 JS 变量与 JavaScript 相集成。
这一部分内容并不详细介绍 Geb 的具体使用细节,只概述了 Geb 的一些基本内容以及它在功能测试中的应用情况。
接下来就通过范例来介绍针对带有一个搜索字段的 Web 页面,如何利用 Geb 编写功能测试。
5.1 Geb 脚本
虽然 Geb 可以单独用于 Groovy 脚本,但在很多场合中,它是和其他测试框架联合使用的。Geb 自带很多可以用于 JUnit 3/4、TestNG 以及 Spock 中的基本类。这些基本类都是 Geb 额外模块的一部分,需要以依赖的形式添加进来。
比如说,在下例中,在 JUnit 4 测试中,必须使用 @Grab
依赖来运行带有 Selenium Firefox 驱动的 Geb。需要 JUnit 3/4 支持的模块是 geb-junit
:
@Grapes([
@Grab("org.gebish:geb-core:0.9.2"),
@Grab("org.gebish:geb-junit:0.9.2"),
@Grab("org.seleniumhq.selenium:selenium-firefox-driver:2.26.0"),
@Grab("org.seleniumhq.selenium:selenium-support:2.26.0")
])
Geb 的中心类是 geb.Browser
类,正如其名称所暗示的那样,用来浏览页面及访问 DOM 元素:
def browser = new Browser(driver: new FirefoxDriver(), baseUrl: 'http://myhost:8080/myapp') 1⃣️
browser.drive {
go "/login" 2⃣️
$("##username").text = 'John' 3⃣️
$("##password").text = 'Doe'
$("##loginButton").click()
assert title == "My Application - Dashboard"
1⃣️ 创建了一个新的 Browser
实例。在本例中,它使用了 Selenium FirefoxDriver
,并设置了 baseUrl
。
2⃣️ go
用于导航至一个 URL 或相对 URL。
3⃣️ $
和 CSS 选择器一起用于访问 DOM 字段的 username
和 password
。
Browser
类带有的 drive
方法会将所有方法或属性的调用都委托给当前的 browser
实例。 Browser
配置不能在行内完成,它可以设置在外部的 GebConfig.groovy
配置文件中。在实际中, Browser
类大多由 Geb 测试基本类所隐藏。它们会将所有丢失的属性及方法调用都委托给存在于后台中的当前 browser
实例。
class SearchTests extends geb.junit4.GebTest {
@Test
void executeSeach() {
go 'http://somehost/mayapp/search' 1⃣️
$('##searchField').text = 'John Doe' 2⃣️
$('##searchButton').click() 3⃣️
assert $('.searchResult a').first().text() == 'Mr. John Doe' 4⃣️
}
}
1⃣️ Browser##go
获取相对或绝对链接,调用页面。
2⃣️ Browser##$
用于访问 DOM 内容。可以使用由潜在的 Selenium 驱动所支持的任何 CSS 选择器。
3⃣️ click
用于点击按钮。
4⃣️ $
用于获取 searchResult
块的首个链接。
上例展示了一个利用 JUnit 4 基本类 geb.junit4.GebTest
的简单 Geb Web 测试。注意在该例中, Browser
配置是放在外部的。 GebTest
会将一些方法( go
或 $
)都委托给潜在的 browser
实例。
5.2 更多 Geb 相关内容
在之前的内容中,只介绍了一些 Geb 功能的皮毛,更多详情参见 其项目主页 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论