gpt4 book ai didi

groovy - 有人可以解释一下 geb 页面内容 DSL 中的语法吗?

转载 作者:行者123 更新时间:2023-12-02 01:21:49 26 4
gpt4 key购买 nike

我无法理解 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)}
}
}

我对内容引用的闭包内的语法感兴趣。 Geb 将内容 DSL 的语法描述为

«name»(«options map») { «definition» }

我不明白这个语法。名称部分看起来像一个变量,但它没有声明(我错过了 def 或类似的东西),最后一部分看起来像一个闭包。但名字和闭包之间的联系在哪里呢?两者之间没有等号连接。在标准 Groovy 类中,语法

«name» { «definition» }

无法编译。内容 DSL 的一行会发生什么? uiHeaderseeGuideButton 到底是什么?它们与以下闭包有何关系?这个语法到底是如何工作的?

最佳答案

在幕后,Geb 寻找具有签名的方法:

uiHeader(Map, Closure)

在 groovy 中,您可以捕获某个方法丢失的情况(请参阅 methodMissing),因此 Geb 在内部会捕获此情况并知道如何解决该变量的任何 future 请求

同样在 groovy 中,闭包作为最后一个参数可以位于括号之外,这就是为什么你可以这样做

uiHeader(required: false) { $('h1') }

关于groovy - 有人可以解释一下 geb 页面内容 DSL 中的语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54053222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com