javascript - 使用 javascript 创建的页面的 Grails Gebish 功能测试

标签 javascript grails selenium htmlunit geb

我正在编写一个测试类

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/

相关文章:

javascript - 在数组中添加元素时未捕获非法访问

javascript - 谷歌电子表格 : Encrypt cell content with Google Apps Script

python - Selenium:get_attribute 一个条件

升级到 2.5.0 后,使用私有(private)方法的 Grails spock 测试失败

python - 使用 Selenium Python 获取 Iframe Src 内容

相当于 XPath 的 CSS 选择器

javascript - 嵌套 HTML 表标签被删除

javascript - FullPage JS 中的多个视频自动播放不起作用

grails - 在 GSP 页面上显示枚举值,然后将它们绑定(bind)到数据库中

grails - 在Grails中的URLMapping之前触发过滤器