3

我有一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
        }
    } 
}

行不通

如何获取闭包“内容”的内容?

4

2 回答 2

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
    }
}

查看手册中有关表单控件快捷方式的部分以了解其工作原理。

于 2012-12-23T15:22:08.263 回答
1

如果内容变得太复杂而无法使用可用工具,您始终可以在内容中创建页面内容列表。

static content = {
    username { module $(... }
    contactTitle { $(... }
    contactGivenName { $(... }
    contactFamilyName { moduleList $(... }

    pageFields {
    [
    username,
    contactTitle,
    contactGivenName,
    contactFamilyName,
       ]
   }
}

def populateFields(valueList) {
    pageFields.each {
        it.value(somevaluefromList)
    }

}
于 2014-06-24T23:56:34.790 回答