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.
我所有的 类 都被认为是可变的。我仍然不明白为什么默认包中的行为不同所以如果有人有线索......
感谢大家的帮助。
我是 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.
我所有的 类 都被认为是可变的。我仍然不明白为什么默认包中的行为不同所以如果有人有线索......
感谢大家的帮助。