Module 如何使用Spock一次验证Geb模块的整个内容,而不单独断言每个元素?

Module 如何使用Spock一次验证Geb模块的整个内容,而不单独断言每个元素?,module,spock,assertions,geb,presentation-layer,Module,Spock,Assertions,Geb,Presentation Layer,我有一个模块,其中为我正在使用的网页上的每个元素定义了内容: package com.abc.modules import geb.Module class Member extends Module { static content = { // Member fields mbrID {$("div.subject-details div.memberDetails input.projMbrId")} mbrName {$("in

我有一个模块,其中为我正在使用的网页上的每个元素定义了内容:

package com.abc.modules

import geb.Module

class Member extends Module {
    static content = {
        // Member fields
        mbrID {$("div.subject-details div.memberDetails input.projMbrId")}
        mbrName {$("input.projMbrName")}
        mbrRegion {$("select.projMbrReg")}
        mbrAdd1 {$("input.projMbrAdd1")}
        mbrAdd2 {$("input.projMbrAdd2")}
        mbrAdd3 {$("input.projMbrAdd3")}
        mbrCity {$("input.projMbrCity")}
        mbrState {$("select.projMbrState")}
        mbrZip {$("input.projMbrZip")}
        mbrHomePhone {$("input.projMbrHomePhone")}
        mbrHomePhoneExt {$("input.projMbrHomePhoneExt")}
        mbrWrkPhone {$("input.projMbrWorkPhone")}
        mbrWrkPhoneExt {$("input.projMbrWorkPhoneExt")}
        mbrEmail {$("input.projMbrPersonalEMail")}
        mbrWrkEmail {$("input.projMbrWorkEMail")}
    }
}
在我的测试规范中,我断言模块中包含的每个元素都存在,但我知道如何做到这一点的唯一方法是分别断言每个元素:

package cmdr.ProjectCover

import com.gdit.qa.fwa.geb.cmdr.pages.HomePage
import com.gdit.qa.fwa.geb.cmdr.pages.ProjectCover
import geb.spock.GebReportingSpec

class VerifyMemberFields extends GebReportingSpec {
    def setupSpec() {
        // Log in to app
        via HomePage
        loginPage.signIn("marco", "abc123")

        // Navigate to Member Page
        memberPageButton.click()
    }

    def "Verify Member fields exist"() {
        when: "User selects Member option for subject type"
        at ProjectCover
        projSubject.click()
        projCoverMbrFields.projSubjectMbrOption.click()

        then: "All expected member fields are displayed in the left panel"
        assert projCoverMbrFields.mbrID.present
        assert projCoverMbrFields.mbrName.present
        assert projCoverMbrFields.mbrRegion.present
        assert projCoverMbrFields.mbrAdd1.present
        assert projCoverMbrFields.mbrAdd2.present
        assert projCoverMbrFields.mbrAdd3.present
        assert projCoverMbrFields.mbrCity.present
        assert projCoverMbrFields.mbrState.present
        assert projCoverMbrFields.mbrZip.present
        assert projCoverMbrFields.mbrHomePhone.present
        assert projCoverMbrFields.mbrHomePhoneExt.present
        assert projCoverMbrFields.mbrWrkPhone.present
        assert projCoverMbrFields.mbrWrkPhoneExt.present
        assert projCoverMbrFields.mbrEmail.present
        assert projCoverMbrFields.mbrWrkEmail.present
    }

我想知道是否有办法(而不是单独声明模块的每个元素)一次断言模块的全部内容,这样我的功能方法就可以减少阻塞条件。

目前我不知道怎么做,但在实现时它是可能的,而且相对容易。

我没有时间来测试这一点,但如果您想尝试一下,我认为这应该是可行的:

def "Verify Member fields exist"() {
    when: "User selects Member option for subject type"
    at ProjectCover
    projSubject.click()
    projCoverMbrFields.projSubjectMbrOption.click()

    then: "All expected member fields are displayed in the left panel"
    projCoverMbrFields.content.each{ element ->
        assert element.present
    }
}