У меня есть несколько функциональных тестов geb для приложения Grails.
Тесты работают должным образом при выполнении из терминала или 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. В большинстве подобных случаев, если я скопирую код метода прямо в свою спецификацию, он будет работать, хотя и разрушит всю структуру, которая у меня есть на моих тестовых страницах.
У кого-нибудь есть опыт запуска тестов geb с Xvfb? Вы сталкивались с этими проблемами?
Все тесты проходят при локальном выполнении, и это не проблема с данными, так как БД всегда очищается
Кроме того, без внесения каких-либо изменений тесты ведут себя недетерминировано (на hudson), поэтому указанное выше исключение не всегда выдается. Вообще без каких-либо изменений тесты иногда проходят успешно, а иногда терпят неудачу.