Geb:页面内容列表

时间:2012-12-18 17:19:00

标签: groovy geb

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

不起作用

如何获取关闭'内容'的内容?

2 个答案:

答案 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)
    }

}