我尝试创建一个扩展另一个页面的页面,并在我尝试运行项目时收到以下错误消息: groovy.lang.MissingPropertyException:没有这样的属性:类的navLinkPage1:myPage
import geb.Page
class HomePage extends myPage {
static url = "http://www.mywebsite.com"
static at = { title == "Home"}
}
class MyPage extends Page {
static content = { navLinkPage1 { $("#page1Link") }
}
每个页面都将具有完全相同的页眉块,具有相同的链接和诸如此类的东西。那么为什么我不能只创建一个页面对象并在之后的单个页面中继承它?或者我只是错误地做了这个?
答案 0 :(得分:3)
如果您可以包含实际使用navLinkPage1
链接的代码块,我相信我们可以使用navLinkPage1
跟踪您的确切问题,但这听起来像您的代码块“{ {1}}“而不是”to MyPage
“。
也就是说,考虑复杂UI的页面对象模式Module Object pattern(免责声明:我刚刚完成了这个术语)。因此,不是让每个页面都继承自to HomePage
,而是在MyPage
之间创建(假?)关系,比如说“Page
”,la:
NavigationModule
在你的测试中,你会说:
class NavigationModule extends Module {
static content = {
homeLink { $("a", title:"Home") }
contactLink { $("a", title:"Contact Us") }
}
}
class HomePage extends Page {
static content = { navBar { module NavigationModule } }
}
就个人而言,我一直在处理像类这样的模块,并且假装它们的内容是私有的,只能让自己访问操作而不是内容。因此,只能通过to HomePage
navBar.contactLink.click()
方法访问我的LoginModule
,而不是直接与logIn(user,pass)
和username
成员进行交互......但......可能对您不起作用。导航栏特别适合直接访问。 : - )