我告诉你关于Geb的事情,我已经使用gebish测试Web应用程序超过六个月了。这是它的所有好处:
现在更详细地介绍每一项。
Geb利用WebDriver库进行浏览器自动化。这意味着Geb可以与任何WebDriver支持的浏览器一起工作,而WebDriver支持的浏览器列表不断增长。
核心支持的浏览器包括:
还有实验性支持:
WebDriver还支持远程驱动程序。这允许您自动化在另一台机器上运行的浏览器!这意味着您可以轻松地从Mac或Linux机器上运行测试套件来针对IE浏览器(反之亦然)。
Geb受到jQuery的启发,提供了一种简洁有效的获取内容的方式。这称为Navigator API。
您可以在任何地方使用dollar函数来基于CSS选择器、属性匹配器和/或索引选择内容。
// CSS 3 selectors
$("div.some-class p:first[title='something']")
// Find via index and/or attribute matching
$("h1", 2, class: "heading")
$("p", name: "description")
$("ul.things li", 2)
// 'text' is special attribute for the element text content
$("h1", text: "All about Geb")
// Use builtin matchers and regular expressions
$("p", text: contains("Geb"))
$("input", value: ~/\d{3,}-\d{3,}-\d{3,}/)
// Chaining
$("div").find(".b")
$("div").filter(".c").parents()
$("p.c").siblings()
Geb对于页面对象模式提供了一流的支持,利用Groovy的DSL功能,使开发人员可以轻松定义页面中有趣的部分,并以简洁、可维护和可扩展的方式实现。
import geb.Page
class LoginPage extends Page {
static url = "http://myapp.com/login"
static at = { heading.text() == "Please Login" }
static content = {
heading { $("h1") }
loginForm { $("form.login") }
loginButton(to: AdminPage) { loginForm.login() }
}
}
class AdminPage extends Page {
static at = { heading.text() == "Admin Section" }
static content = {
heading { $("h1") }
}
}
现代网页包含许多异步操作,如 AJAX 请求和动画效果。Geb 提供了内置的支持,以应对这个事实。
任何内容查找或操作都可以用 waitFor 子句包装。
waitFor {
$("p.status").text() == "Asynchronous operation complete!"
}
这将持续测试条件一定时间(可配置),直到通过。同样的技术也可以用于仅等待内容,而不一定是为了使内容具有某些特征。
def dynamicParagraph = waitFor { $("p.dynamically-added") }
dynamicParagraph.text() == "Added dynamically!"
您还可以在页面对象的内容DSL中定义隐式等待的内容。import geb.Page
class DynamicPage extends Page {
static content = {
dynamicParagraph(wait: true) { $("p.dynamically-added") }
}
}
根据此定义,当请求dynamicParagraph时,Geb将隐式等待一定时间以使其出现。
Geb为流行的测试框架提供了集成模块,例如Spock、JUnit、TestNG、EasyB和Cucumber(通过Cuke4Duke)。
虽然Geb可以与所有这些框架很好地配合使用,但是它在与Spock配合使用时表现得非常出色。Spock是一个创新的测试框架,非常适合与Geb一起使用。使用Spock + Geb可以轻松编写非常清晰、简洁、易于理解的测试规范。
import geb.Page
import geb.spock.GebSpec
class LoginSpec extends GebSpec {
def "login to admin section"() {
given:
to LoginPage
when:
loginForm.with {
username = "admin"
password = "password"
}
and:
loginButton.click()
then:
at AdminPage
}
}
Geb易于集成到任何构建系统中,可以获取有关将其与以下构建/项目系统集成的信息和示例:
您可以在此处查看我的示例(Spock+GEB):github
在官方网站了解更多关于Geb的信息。
谢谢!!!