【问题标题】:How to verify entire content of Geb module using Spock at once without asserting each element individually?如何在不单独断言每个元素的情况下一次使用 Spock 验证 Geb 模块的全部内容?
【发布时间】:2018-03-10 18:56:30
【问题描述】:

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

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
    }

我想知道是否有办法让我(而不是单独断言模块的每个元素)一次断言模块的全部内容,以便可以减少我的特性方法然后阻塞条件。

【问题讨论】:

    标签: module spock assertions geb presentation-layer


    【解决方案1】:

    目前我不知道有什么方法可以做到这一点,但是当GEB-369 实施时,这将是可能的并且相对容易。

    【讨论】:

      【解决方案2】:

      我没有时间对此进行测试,但如果您想尝试一下,我认为这应该可行:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-10
        • 2018-11-30
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        • 2015-01-17
        相关资源
        最近更新 更多