验收测试 - 不能执行JS

  • 作者:KK

  • 发表日期:2015.12.13


当要测试的页面上存在JS标签或者JS代码时,它们不会被运行起来,比如有这样的JS代码:

window.onload = function(){
	var div = document.getElementById('status');
	div.innerText = '数据获取中...';
};

假如#status的text本来是空的,这段JS就是在页面加载完毕之后将这个#status的内容设置成一个提示文本

我们用各种安防软件设置本机网速限制为几KB一秒,再用浏览器人工访问这个页面可以看到,由于网页慢,页面代码未加载完毕,#status是空的,加载完成后就由于JS代码被运行所以出现了提示语句

但是在Codeception的基础页面测试中并不是这样,以下断言是不会成功的

$I->see('数据获取中...', '#status');

原因就是 #status 始终都是空的,因为JS没有被运行起来,这是因为基础的验收测试是靠CURL获取页面源代码,再从源代码中构造DOM树,从DOM树中实现了测试代码的断言行为

但并没有提取源代码中的JS部分运将JS代码运行起来,这也需要一个JS引擎才可以实现,但可以告诉你这个codecept.phar包中并不包含JS引擎,呵呵,就不多啰嗦了,我想你都是做了1年左右的PHP了,我说这么点你已经知道具体原因了

但是要实现运行JS也并非不可能,后面的 WebDriver验收测试 是可以帮到你的,且淡定地先把基础的验收测试学好吧