使用javascript创建的页面的Grails Gebish功能测试
我正在写一个测试课使用javascript创建的页面的Grails Gebish功能测试,javascript,grails,selenium,htmlunit,geb,Javascript,Grails,Selenium,Htmlunit,Geb,我正在写一个测试课 class ListOfProjectsSpec extends GebReportingSpec{ def "project dashboard filters are instantiated correctly" () { given: at ProjectIndexPage expect: projectTable != null } } 测试my项目扩展的功能 class Pro
class ListOfProjectsSpec extends GebReportingSpec{
def "project dashboard filters are instantiated correctly" () {
given:
at ProjectIndexPage
expect:
projectTable != null
}
}
测试my项目扩展的功能
class ProjectIndexPage extends ProjectsCategoryPage{
static at = {
$("title").text() == "Title"
}
static content = {
projectTable {
$("table.dynamic-projectTable")
}
}
}
(我清理了很多代码,只是为了显示最简单的情况)
并发症
类dynamicprojecttable
在运行时添加到表中,其中jquery/javascript作为页面上过滤器的助手
<g:javascript>
$(
$('#projectTable').addClass('dynamic-projectTable');
});
</g:javascript>
其他信息
当查看spock测试的html输出时,很明显,DynamicProjectTable
类没有被添加(与$()
jquery调用执行的所有其他操作一样,我在这里删除了它们以使示例更具可读性)
我试过了
// calling the document.ready function explicitly in my test cases
when:
$("document").ready()
启用的javascript
driver = {
HtmlUnitDriver driver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);
driver
}
但似乎什么都不管用。
任何输入?我可以通过在testSpec中明确地重新启用javascript来解决这个问题:
def setup() {
if (driver instanceof HtmlUnitDriver) {
driver.javascriptEnabled = true
}
}
由javascript构建的页面通常需要Geb等待内容呈现。
有关详细信息,请参阅
基本上,我会尝试在规范代码中显式等待:
waitFor { projectTable }
还可以在页面内容上配置等待:
projectTable(wait: true) {
$("table.dynamic-projectTable")
}
为了避免此类问题,最好定义更适用的at检查
在您的示例中,您使用了:
static at = {
$("title").text() == "Title"
}
尝试检查测试中将使用的内容。例如,表单元素。我还将在at检查器中使用waitFor闭包,以便to调用后的所有页面都可以进行测试
static at = {
waitFor { $('#projectTable').@class.contains("dynamic-projectTable") }
}
谢谢你的提示,我改变了这一点&它使我的测试更加可靠。虽然实际问题的解决方案是其他的(见我自己的答案)。谢谢你的提示,我改变了这一点&它使我的测试更加可靠。虽然实际问题的解决方案是其他的(见我自己的答案)。
static at = {
waitFor { $('#projectTable').@class.contains("dynamic-projectTable") }
}