Sam*_*raf 2 syntax dsl groovy spock geb
我有一些问题需要理解在Geb中描述(定义)页面的语法.以下是一个工作正常的示例页面类,但我不明白它是如何工作的.
import geb.Page
class GebHomePage extends Page{
static url = "http://gebish.org"
static at = { title == "Geb - Very Groovy Browser Automation" }
static content = {
seeGuideButton { $('div', class:'ui huge primary button') }
uiHeader { $('h1', class:'ui header', 0)}
}
}
Run Code Online (Sandbox Code Playgroud)
我对内容引用的闭包内的语法感兴趣.Geb将内容DSL的语法描述为
«name»(«options map») { «definition» }
Run Code Online (Sandbox Code Playgroud)
我不明白这种语法.名称部分看起来像一个变量,但它没有声明(我想念def或类似的东西),最后一部分看起来像一个闭包.但是名称和闭包之间的联系在哪里.连接两者没有等号.在标准的groovy类中的语法
«name» { «definition» }
Run Code Online (Sandbox Code Playgroud)
不编译.在内容DSL的一行中会发生什么?究竟是什么uiHeader以及seeGuideButton它们如何与以下关闭相关?这种语法如何正常工作?
在幕后,Geb寻找带有签名的方法:
uiHeader(Map, Closure)
Run Code Online (Sandbox Code Playgroud)
在groovy中,你可以在方法丢失时捕获(请参阅methodMissing),以便内部Geb将捕获这个并知道如何解决该变量的任何未来请求
同样在groovy中,Closure作为最后一个参数可以在括号之外,这就是你可以做到的原因
uiHeader(required: false) { $('h1') }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |