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このクラスにメソッドを追加したいと思います。これにより、このメソッドを呼び出して、テストケースのテキストフィールドにデータを入力できるようになります。このメソッドには1つの引数が渡されます。これ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 に答える