在 Geb 规范中重用测试

Re-using tests among Geb Specs

我正在尝试重新使用我在另一个 Geb 规范中编写的 Geb 规范测试,因此我不需要重新编写代码。我总是需要不同页面的产品编号,所以我想做类似以下的事情;

class BasePageGebSpec extends GebReportingSpec {
     def firstProductOnBrowsePage(){
        when:
        to BrowsePage
        then:
        waitFor { BrowsePage }
        productId { $("meta", 0, itemprop: "mpn").@content }
        return productID // ???
    } 
}

在另一个 GebSpec 中,我希望使用上面的 firstProductOnBrowsePage,如下所示:

 class ProductDetailsPageGebSpec extends BasePageGebSpec {
     def "See first products details page"(){
        when:
        to ProductDetailsPage, productId: firstProductOnBrowsePage()

       then:
       waitFor { $("h2", class:"title").size() != 0 }
       assert true
    }
}

如有任何帮助,我们将不胜感激,

谢谢!

使用 traits 你几乎可以得到你想要的(但是测试在特征中不起作用)。您还可以考虑创建一个规范 class 来测试您拥有的每个页面的产品编号,然后不必担心在每个单独页面的规范 class.

中测试此功能
trait BasePageGebSpec extends GebReportingSpec {
 def testingFirstBrowse() {
    waitFor { BrowsePage }
    productId { $("meta", 0, itemprop: "mpn").@content }
    return productID
 }
}

 class ProductDetailsPageGebSpec implements BasePageGebSpec {
    def firstProductOnBrowsePage(){
        when:
            to BrowsePage
        then:
            testingFirstBrowse()
    } 
}

将 productId 作为内容添加到 BrowsePage:

class BrowsePage extends Page {
  static content = {
    productId { $("meta", 0, itemprop: "mpn").@content }
  }
}

然后在您的规范中使用它:

class ProductDetailsPageGebSpec extends BasePageGebSpec {
  def "See first products details page"(){
    when:
    to ProductDetailsPage, productId: to(BrowsePage).productId

    then:
    waitFor { $("h2", class:"title").size() != 0 }
  }
}