在Geb Specs中重复使用测试

时间:2015-09-21 20:51:27

标签: groovy spock geb

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

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

任何帮助将不胜感激,

谢谢!

2 个答案:

答案 0 :(得分:0)

使用traits,你几乎可以得到你想要的东西(但测试不能在特质中工作)。您还可以考虑创建一个spec类来测试您拥有的每个页面的产品编号,然后不必担心在每个页面的spec类中测试此功能。

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

答案 1 :(得分:0)

BrowsePage上添加productId作为内容:

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