Groovy 为什么我的GEB脚本在使用单独的助手函数时失败?

Groovy 为什么我的GEB脚本在使用单独的助手函数时失败?,groovy,spock,geb,Groovy,Spock,Geb,我试图使用Gradle运行GEB测试;如果我从一个方法运行所有内容,它可以正常工作,但如果我使用帮助器函数,它将失败: 场景1有效: def "Select ORG Unit and save the invoice and Delete it"() { when: "We click arrivals drop-down link" waitFor { inprogtoArrivals.isDisplayed() } then: "Cl

我试图使用Gradle运行GEB测试;如果我从一个方法运行所有内容,它可以正常工作,但如果我使用帮助器函数,它将失败:

场景1有效:

def "Select ORG Unit and save the invoice and Delete it"() {            
    when: "We click arrivals drop-down link"
        waitFor { inprogtoArrivals.isDisplayed() }

    then: "Click on the Arrivals Tab"
        waitFor { $('#arrivalsTab').find("a").click() }

        Browser.drive {
                go driver.currentUrl
            }
        waitFor { createInvoice.click() }
}
场景2不起作用:

def uploadInvoice() {

    when: "We click arrivals drop-down link"
        waitFor { inprogtoArrivals.isDisplayed() }

    then: "Click on the Arrivals Tab"
        waitFor { $('#arrivalsTab').find("a").click() }
}

def "Select ORG Unit and save the invoice and Delete it"() {            
    when:           
        uploadInvoice()
        Browser.drive {
                go driver.currentUrl
            }
    then:
        waitFor { createInvoice.click() }
}

在这里,它无法处理上传发票,并且失败了。有人能帮我解决这个问题吗?

您不能在helper方法中使用when:和then:块,因为Spock使用这些块来区分特性测试方法和常规方法。您使用这些块的事实意味着uploadInvoice是一个测试。

为什么在您的规范中使用Browser.drive{}块?使用plain go driver.currentUrl应该可以工作,而无需将其包装在任何驱动器{}块中。如果某些操作失败,通常最好包含stacktrace,这样可以更容易地提供帮助。感谢您在第一次评论中提供的提示。我完全不知道!我不知道是否有一个规则我不能在helper函数中使用when:and then:但我已经使用了至少50个helper函数when:and then:;他们为我工作得很好!