我正在编写一个测试类
class ListOfProjectsSpec extends GebReportingSpec{
def "project dashboard filters are instantiated correctly" () {
given:
at ProjectIndexPage
expect:
projectTable != null
}
}
测试我的ProjectIndexPage
的功能。
class ProjectIndexPage extends ProjectsCategoryPage{
static at = {
$("title").text() == "Title"
}
static content = {
projectTable {
$("table.dynamic-projectTable")
}
}
}
(我清理了很多代码以仅显示最简单的情况)。
并发症
dynamic-projectTable
类在运行时添加到带有 jquery/javascript 的表中,作为页面上过滤器的访问器。
<g:javascript>
$(
$('#projectTable').addClass('dynamic-projectTable');
});
</g:javascript>
错误
junit.framework.AssertionFailedError: geb.error.RequiredPageContentNotPresent:
The required page content 'projectTable- SimplePageContent (owner: ProjectIndexPage, args: [],
value: null)' is not present
其他信息
当查看 spock 测试的 html 输出时,很明显没有添加 dynamic-projectTable
类(由 $()
执行的所有其他操作也是如此) > jquery 调用 - 我在这里删除了它们以使示例更具可读性)
我尝试过
// calling the document.ready function explicitly in my test cases
when:
$("document").ready()
启用 JavaScript
driver = {
HtmlUnitDriver driver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);
driver
}
但似乎没有任何效果。 有任何输入吗?
最佳答案
由 javascript 构建的页面通常需要 Geb 等待内容渲染。 请参阅http://www.gebish.org/async了解详情。
基本上,我会尝试在您的规范代码中显式等待:
waitFor { projectTable }
等待也可以在页面内容上配置:
projectTable(wait: true) {
$("table.dynamic-projectTable")
}
关于javascript - 使用 javascript 创建的页面的 Grails Gebish 功能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303499/