我有一个Page
班级
class SignUpPage extends Page {
static url = "signup"
static at = { waitFor { title.startsWith("Join") } }
static content = {
firstNameField { $("input", name:"firstName") }
lastNameField { $("input", name:"lastName") }
emailField { $("input", name:"email") }
passwordField { $("input", name:"password") }
}
}
我想在此课程中添加populateFields
方法。这将允许我调用此方法来填充测试用例中的文本字段。这个方法传入了一个参数 - Map
,允许我根据我的测试用例覆盖某些字段值。
问题是我不知道如何迭代页面的“内容”。为了更清楚地看下面的代码:
class SignUpPage extends Page {
static url = "signup"
// .. as defined above ..
def populateFields(customValues = [:]) {
// I want to iterate of the textFields here
// Something like...
textFields = this.metaclass.methods.findAll {
it.name.endsWith("Field")
}
textFields.each {
// populate with data
}
}
}
此不起作用。
如何获取关闭'内容'的内容?
答案 0 :(得分:2)
我认为有一种更简单的方法来实现它,您不需要迭代页面对象的内容。如果地图中的键是要修改的输入的名称属性,则可以执行以下操作:
def populateFields(customValues = [:]) {
def form = $('form') //can be any element that is enclosing all of your inputs
customValues.each { key, value ->
form[key] = value
}
}
请查看手册中form control shortcuts的部分,了解其工作原理。
答案 1 :(得分:1)
如果内容变得过于复杂而无法使用可用工具,您可以随时在内容中创建页面内容列表。
static content = {
username { module $(... }
contactTitle { $(... }
contactGivenName { $(... }
contactFamilyName { moduleList $(... }
pageFields {
[
username,
contactTitle,
contactGivenName,
contactFamilyName,
]
}
}
def populateFields(valueList) {
pageFields.each {
it.value(somevaluefromList)
}
}