运行Geb + spock测试无头

时间:2014-06-12 13:04:40

标签: grails spock geb xvfb

我为grails应用程序提供了许多geb功能测试。

从终端或IDE执行时,测试按预期工作。 虽然测试需要由hudson执行,所以它们使用Xvfb以无头模式运行。

问题是测试仍然失败,或者出现意外行为,在没有意义的地方返回像RequiredPageContentNotPresent和Stale Element Reference Exception这样的错误。

例如: (在上面验证了LicencePage,并且页面未被更改)

when:
   addDocument(Data.Test_Doc_name,Data.Test_Doc_file)

有时会抛出

 Failure:  Add Actual Licence (HomePageSpec)
|  geb.error.RequiredPageContentNotPresent: The required page content 'addDocument - SimplePageContent (owner: LicencePage, args: [Functional Test Doc, /var/lib/hudson/jobs/KB-Functional_Tests/workspace/app/../manual_test_data/so_v3/os_test_1], value: null)' is not present
    at geb.content.TemplateDerivedPageContent.require(TemplateDerivedPageContent.groovy:61)
    at geb.content.PageContentTemplate.create_closure1(PageContentTemplate.groovy:63)
    at geb.content.PageContentTemplate.create(PageContentTemplate.groovy:82)
    at geb.content.PageContentTemplate.get(PageContentTemplate.groovy:54)
    at geb.content.NavigableSupport.getContent(NavigableSupport.groovy:45)
    at geb.content.NavigableSupport.methodMissing(NavigableSupport.groovy:121)
    at geb.Browser.methodMissing(Browser.groovy:194)
    at geb.spock.GebSpec.methodMissing(GebSpec.groovy:51)
    at HomePageSpec.Add Actual Licence (HomePageSpec.groovy:228)

方法addDocument()是在'摘要'上定义的。页面,LicencePage正在扩展。在大多数情况下,如果我将方法代码直接复制到我的Spec中,它会起作用,尽管它破坏了我在测试页面上的所有结构。

任何人都有使用Xvfb运行geb测试的经验吗?你有没有遇到过这些问题?

  

所有测试都在本地执行时传递,这不是数据问题,因为数据库始终被清除

此外,在不进行任何更改的情况下,测试的行为是非确定性的(在哈德森上),因此并不总是抛出上述异常。没有任何改变,测试有时是成功的,有时会失败。

1 个答案:

答案 0 :(得分:2)

您提供的描述似乎是flackey测试套件的症状。不久前我们也面临着这个问题。一个很好的起点是presentation(大约35分钟)和documentation关于geb等待的东西。

如果您认为,它可能与xvfb(我没有经验)有关,您可以尝试使用phantomjs作为测试运行器并检查它是否正常工作。