Geb/Groovy : 页面对象 class 在使用 "to" 选项引用时在另一个中被视为 属性

Geb/Groovy : Page object class considered as a property in another when refering to with "to" option

我是 Groovy 编程的新手,我目前正在尝试在 IntelliJ IDE 上使用 Geb 和 Spock 测试网络应用程序。我想在不使用 Spock 的情况下先尝试一个简单的脚本,这就是为什么我使用一个简单的 main class 来创建浏览器等等以及 运行 一些基本测试(理解:验证我是否在正确的位置页)。

一切正常,但我有很多页面 class 融化在与我的主要 class、模块等相同的文件夹中。所以我决定用包来清理。这是我的项目文件夹:

源码

---主要

------groovy

------------应用程序

----------------模块

----------------页数

----------------模板

module 文件夹包含我页面中使用的模块 pages 文件夹包含浏览器将浏览的实际页面 templates 文件夹包含一些超级页面 class,用于不通过页面实例重复内容。

我的 class Main 和 main 方法在 app 文件夹中。

所以我重新运行 以前运行良好的代码(当每个源文件都在同一个文件夹中时)并且我在线程 "main" groovy.lang.MissingPropertyException 中收到错误异常: 没有 属性: class 的主页: app.pages.loginPage

这行似乎是问题所在(在 loginPage.groovy 中):

loginButton(to: homePage){$("input", id: "loginButton_submit")}

loginPage class 的 static content 中。

我不明白为什么会出现此错误,因为 loginPage 和 homePage 在同一个包中。我想我不明白这里的某些 groovy 内容或编译机制。

这是我收到的错误消息:

The package is the correct one both in homePage and loginPage (they are in the same one) so the class seems to be resolved. But when running, `homePage` is considered as a static property of `loginPage`I suppose and as it is not declared in `loginPage` properties it cannot work. Here is my log :

Exception in thread "main" groovy.lang.MissingPropertyException: No such property: homePage for class: app.pages.loginPage at groovy.lang.MetaClassImpl.invokeStaticMissingProperty(MetaClassImpl.java:1004) at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1859) at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1835) at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3735) at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:175) at groovy.lang.Closure.getPropertyTryThese(Closure.java:312) at groovy.lang.Closure.getPropertyOwnerFirst(Closure.java:306) at groovy.lang.Closure.getProperty(Closure.java:295) at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:50) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307) at app.pages.loginPage$__clinit__closure4.doCall(loginPage.groovy:28)...

你有什么想法吗?

当您将主页从 "main" 移动到 "pages" 时,请检查您的主页所属的包是否已更新:

package app.pages

class homePage extends Page {

   }

如果主页上的包不正确或未声明class您的登录页面将无法解析它

感谢这条评论,终于解决了:

Note that by convention class names in Java and Groovy usually start with a capital letter.

我所有的 类 都被认为是可变的。我仍然不明白为什么默认包中的行为不同所以如果有人有线索......

感谢大家的帮助。