我是一名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()方法但没有成功。
任何想法和指导都将不胜感激。
此外,我不反对使用其他测试工具或任何其他可能有帮助的中间件,如果你知道的话。我没有在我的搜索中找到任何东西,也没有找到解决我的困境的方法。
答案 0 :(得分:3)
我会说守夜人并不是为完成这项任务而设计的。在GUI(图形用户界面)上执行验收测试是一个了不起的框架,但它不是一个网络爬虫。浏览器自动化是一项资源密集型操作,尤其是当您通过 Selenium WebDriver 自动化真实的Web浏览器时。因此,如果代码结构比图形部分更重要,我建议您使用更多“简约”库,如 CasperJS 。它基于 PhantomJS ,一个WebKit无头浏览器。
如果你想保留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文档类型声明和一些注释。它工作正常。