返回介绍

5 利用 Geb 进行功能测试

发布于 2025-01-04 00:44:53 字数 2799 浏览 0 评论 0 收藏 0

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 字段的 usernamepassword

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文