使用Nightwatch测试评论& DOCTYPE

时间:2017-05-11 21:51:28

标签: javascript nightwatch.js

我是一名IT教练,并已开始使用Nightwatch来测试学生'做作业,看它是否符合规格。

我可以测试所有"正常"元素/属性没有问题。我的问题是你可能通常不会在生产环境中测试的一些东西。

我想测试他们正在使用正确的HTML5 doctype,当然,它位于root之外,我相信Nightwatch从HTML节点开始。

我也很高兴他们使用评论来创造自己的生活,让他们的同事更轻松。所以,我想测试他们是否留下评论。注释的某些部分是必需且一致的,但其他部分各不相同,例如注释中的名称。以下是评论的示例......

The Name of the Page
Sample Page for the Widgets
Author: your name
Date: the date

同样,我可能不会在现实世界中测试评论和doctype,但想知道是否可以使用Nightwatch?

我已经尝试过containsText()和text.to.contain()方法但没有成功。

任何想法和指导都将不胜感激。

此外,我不反对使用其他测试工具或任何其他可能有帮助的中间件,如果你知道的话。我没有在我的搜索中找到任何东西,也没有找到解决我的困境的方法。

1 个答案:

答案 0 :(得分:3)

我会说守夜人并不是为完成这项任务而设计的。在GUI(图形用户界面)上执行验收测试是一个了不起的框架,但它不是一个网络爬虫。浏览器自动化是一项资源密集型操作,尤其是当您通过 Selenium WebDriver 自动化真实的Web浏览器时。因此,如果代码结构比图形部分更重要,我建议您使用更多“简约”库,如 CasperJS 。它基于 PhantomJS ,一个WebKit无头浏览器。

Nightwatch

如果你想保留Nightwatch,你可以做的最好的事情是使用带有.source()方法的正则表达式,它返回DOM的序列化(字符串):

browser
  .url("http://www.website.com")
  .source(function (res) {
    if (/<!--/.test(res.value)) {
      console.log("Comment detected!");
    }
  })

这可以检测至少一条评论,但您无法检查DOCTYPE,因为.source()方法不会返回该评论。使用XPath,根元素将是/html

此外,这里我们使用基本的console.log作为评论,这对于执行测试并不理想。但问题是大多数Nightwatch断言方法都需要一个CSS选择器......

卡斯帕

这在这里更容易......

使用Casper,您可以使用.getHTML()方法获取DOM的序列化。但是在这里,返回DOCTYPE,您可以使用断言(.assertMatch())来验证正则表达式的结果。您的代码可以具有以下结构:

casper.test.begin('Test website', function (test) {
    casper.start('http://www.website.com', function () {
        var html = this.getHTML();
        test.assertMatch(html, /<!DOCTYPE html>/);
        test.assertMatch(html, /<!--.*-->/);
    });

    casper.then(function () {
        // Your code...
    });

    casper.run(function() {
        test.done();
    });
});

我在随机页面上测试了此代码,该页面包含有效的HTML5文档类型声明和一些注释。它工作正常。