Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AngularJS生成页面时的标记验证_Javascript_Validation_Angularjs_Selenium_W3c Validation - Fatal编程技术网

Javascript 使用AngularJS生成页面时的标记验证

Javascript 使用AngularJS生成页面时的标记验证,javascript,validation,angularjs,selenium,w3c-validation,Javascript,Validation,Angularjs,Selenium,W3c Validation,我们使用AngularJS创建了一个单页应用程序。我们希望验证该应用程序的标记。问题是标记大部分是用脚本生成的,所以如果我们将源代码传递给验证器,结果只会是部分的 目前,我们正在以以下方式测试该页面 使用Selenium web自动化库打开页面 做一些动作 将当前HTML转储到文件 使用独立验证器处理它 实现这个流程是非常费时的,因为我们需要硬编码所有的方法来使用一个应用程序,所以我想问一下:还有别的方法吗? < P>你是否考虑使用角度E2E:< /P> 这允许您访问从html获取/验证元

我们使用AngularJS创建了一个单页应用程序。我们希望验证该应用程序的标记。问题是标记大部分是用脚本生成的,所以如果我们将源代码传递给验证器,结果只会是部分的

目前,我们正在以以下方式测试该页面

  • 使用Selenium web自动化库打开页面
  • 做一些动作
  • 将当前HTML转储到文件
  • 使用独立验证器处理它

实现这个流程是非常费时的,因为我们需要硬编码所有的方法来使用一个应用程序,所以我想问一下:还有别的方法吗?

< P>你是否考虑使用角度E2E:< /P>

这允许您访问从html获取/验证元素,如:

expect(element('#email').html()).toBe('something');
从使用jazmine的角度文档:

describe('Buzz Client', function() {
it('should filter results', function() {
  input('user').enter('jacksparrow');
  element(':button').click();
  expect(repeater('ul li').count()).toEqual(10);
  input('filterText').enter('Bees');
  expect(repeater('ul li').count()).toEqual(1);
});
}))

更新1

然后您可以尝试以下方法:


使用
AngularJS
时,您应该必须验证页面的每一个变化,因为
DOM
随着单页应用程序中脚本的变化而变化,只要您坚持使用
AngularJS
编程模型并坚持以下要求:-

  • 验证每个HTML文件/片段

    这些是角度模板/部分或您可能有的任何HTML文件(index.HTML)。 使用基于
    grunt
    的html验证程序插件,例如,这样grunt工作流就可以确保html在提交到源代码存储库之前是有效的。这样的插件可以验证HTML片段

  • 使用内置的
    AngularJS
    指令操作
    DOM

    e、 ngSwitch、ngView、ngIf等,而不是使用jQuery或其他机制的任何自定义内容

    AngularJS
    已经确保了有效的HTML DOM。这意味着生成的HTML总是有效的


  • 我称之为GUI级测试。VisualStudio有一个优秀的浏览器记录和回放工具,允许测试人员创建自动测试,以验证测试人员想要的任何东西

    下面是一段视频:


    要做到这一点,您需要有高级版。此外,我还听到了关于Selenium的好报道,事实上,MSFT自己也支持它。

    我没有找到一种方法来使用该库进行标记验证。它只是测试标记是否与预期的相同。尽管如此,有时人们忘记了
    数据-
    前缀,并且文档不是格式良好的HTML。我说的是这样的情况。@polkovnikov.ph我要强调的是,你也可以用它来验证你的语法。您不需要验证DOM或其序列化副本;未损坏的html源代码对验证器很重要。由于与源代码的outerHTML序列化差异,最终可能会出现比其他任何错误都更不重要的“错误”,从而限制了它的实用性。这是一个很好的答案,除了最后一部分混淆了一些重要的东西;DOM本身(在HTML5之后)确保了DOM中的有效标记,特别是angularJS…我仍在研究一个场景,其中DOM将无效,没有任何错误,指令根本不起作用,即DOM没有失效,最终结果是我的指令不起作用。我将发布该测试的任何更新。DOM不能完全无效。我们验证标记,而不是ram对象中的标记。为了“验证DOM”,我们必须将内存中的模型转换为字符串序列化。DOM不能从它的模型生成无效标记,因为它的模型是理想的,而它是理想的,因为它被解析了。解析器跳过或修复错误的输入,他们不允许它进入他们构建的模型中,因此,没有办法将损坏的标记输出。也就是说,HTML规范本身带来了一些DOM不必遵守的限制,特别是XHTML严格限制,因此它可能取决于“有效”的含义……问题是,Angular的
    innerHTML
    方法和作为字符串的模板中的HTML都没有多大帮助。验证页面的正确方法是首先不要使用Angular。