【问题标题】:What is the best way to generate JavaScript test objects for website automation为网站自动化生成 JavaScript 测试对象的最佳方法是什么
【发布时间】:2012-05-28 14:13:15
【问题描述】:

一点背景: 该团队正在使用 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 表示一个有趣的想法。但我们想提醒您Stack Overflow is not your personal research assistant
  • @JosephtheDreamer - 只要操作人员自己进行了一些研究,我觉得研究问题有点好。这并没有像我们经常遇到的典型的“Giv me deh codez”类型的问题那样让我印象深刻。不过,我认为提醒人们这个网站是针对实际编程问题的,而且这条线可能非常非常细,这很好。

标签: javascript html-parsing functional-testing


【解决方案1】:

我不明白你想通过生成测试对象来达到什么目的。执行nav.b.click() 后,是否要测试b 现在是选定的类?

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

【讨论】:

  • 我的目标是能够使用 TestSwarm 进行这些测试:link 以查找特定于浏览器的问题。以我的经验,如果项目不使用测试对象抽象,代码维护就会变得非常棘手......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2010-10-17
  • 2010-10-24
  • 2023-03-06
相关资源
最近更新 更多