为网站自动化生成JavaScript测试对象的最佳方法是什么?

时间:2012-05-22 05:18:39

标签: javascript html-parsing functional-testing

背景知识: 该团队正在使用C#编写QUnit UI测试 AND 浏览器自动化测试。我想创建一个可以在两者之间共享的JSON对象。这样,如果类名被更改,配置文件只需要在一个地方更新。

该站点使用模板非常动态,因此这些测试对象配置文件必须在运行时创建,不能只解析静态html。

我可以手动生成数据结构或编写工具来帮助我捕获id /类,然后修改生成的数据结构。我不想手工编写代码,因为我的团队测试的网站有数百个控件。

测试将利用这些测试对象使维护更容易,因为站点处于大量流失状态,并且我们当前的测试每天都会中断。一旦所有测试引用相同的测试对象,它只需要修复对象配置。

目前我正在考虑创建一个JavaScript函数,它接受一个选择器并为该元素及其子元素生成所有属性。我可以在运行时调用函数传递控件我要刮,剪切并粘贴输出供以后使用。有没有更好的方法来生成这些对象?

插图:

带有儿童A,B,C的导航栏。可以选择一个。

<div id="nav-bar">
    <div class="a selected">A</div>
    <div class="b">B</div>
    <div class="c">C</div>
</div>

我想创建以下代码(jQuery样式选择器):

var nav_bar = {
    selector: "#nav-bar",
    children: {
        a: { selector: ".a" },
        b: { selector: ".b" },
        c: { selector: ".c" },
    }
}

然后我可以手动添加一些特殊属性,如selectedItem:

var nav_bar = {
    selector: "#nav-bar",
    children: {
        a: { selector: ".a" },
        b: { selector: ".b" },
        c: { selector: ".c" },
        selectedItem: { selector: ".selected" }
    }
}

有了这个,我可以解析nav_bar对象来创建一个有用的测试对象:

var nav = createTestObject(nav_bar);
// var nav = {a: $(".a", "#nav-bar"), b: $(".b", "#nav-bar"), selectedItem: function() { return $(".selected", "#nav-bar"); }}
// Can automate a simple test at this point...could use some more helper functions
// Click b if not already selected
if(nav.b[0] != nav.selectedItem()[0])
{
   nav.b.click(); // assumes clicking causes selected class to change
}

如果类“.selected”发生变化,我不必在整个测试代码中搜索和替换,只需更新selectedItem.selector的一个配置文件。

提前致谢, 乔

1 个答案:

答案 0 :(得分:0)

我不明白你通过生成测试对象来实现的目标。完成nav.b.click()之后,您是否要测试b现在是否为选定的类?

您应该考虑使用PhantomJS或使用Zombie.js进行测试。