Casperjs系列之理论介绍。这一篇我们先来认识一下Casperjs是什么,以及它的一些基本理论知识。

是什么?

Casperjs是一个开源的导航脚本处理和测试工具,基于Phantomjs和SlimerJS。它简化了页面间导航的定义过程,提供了处理常见任务的实用的高级函数、方法和语法糖。

上面这段是从官网上摘取翻译的,可以看出Casperjs是在Phantomjs和Selemjs基础上的再一次更好的封装,有更简单的api,使用起来会更简单,同时它还有自己的测试框架(Phantomjs则没有)。

我们知道Phantomjs就是一个基于webkit内核的无头浏览器(没有界面的浏览器),它可以完全模拟webkit内核浏览器的行为。因此借助于Casperjs我们可以模拟真实用户正常打开浏览器浏览网页的行为。同时,因为它还是一个测试工具,我们可以借助它完成前端自动化测试(端到端)的测试。

能干什么?

  • 定义、排列页面间导航的步骤(先打开页面A,再打开页面B,open, thenOpen)
  • 表单的填充、提交(fill)
  • 点击、跟踪超链接(click a)
    以上三点其实就是模拟用户的浏览网页时的行为
  • 区域、页面截图
    最重要也是最常用的功能之一
  • 测试远程DOM(有自己的断言语法)
    最重要也是最常用的功能之一
  • 记录日志(不同级别的,包括debug,info,warning,error;Casperjs默认在标准输出不输出log信息)
  • 资源下载,包括二进制资源
  • 编写功能测试套件,可以将结果以JUnit XML形式导出
  • 抓取网页内容

今天在这里我们对Casperjs的测试工具的功能先不做讨论,主要介绍和讨论Casperjs的页面导航截图的功能。

如何安装?

  • 首先需要装Phantomjs, >= 1.9.1;python, >= 2.6;mac中默认安装了python,python --version可以查看python的版本
  • 再装Casperjs, 多种安装方式,比如mac, 可以从homebrew, git, npm等等。这里以npm安装举例:npm install -g Casperjs
  • 虽然Casperjs可以通过npm来安装,但是Casperjs和Phantomjs都是独立于node系统的。它不是nodejs的一个库或是包,可以通过node的exec方法来执行Casperjs命令。或者使用SpookyJS来是的node可以驱动Casperjs。
  • spookyJS是将Casperjs作为nodejs的一个子进程来执行。
  • 当然了,在其他语言中也可以直接调用它们,比如java,php,shell等等。

是如何工作的?

  • 首先它是基于消息驱动的。有then,wait字样的操作都是异步的行为。需要注意的是exit()也是异步的。也就是说,step1中调用exit,step2也有可能执行。
  • 同时,它是基于step栈的。只有当执行run()命令时这些步骤才会被真正开始执行。一个step是这样的一个js方法:等待前一个step正在执行时处于等待状态;在请求一个链接和页面加载未完成时处于等待状态。典型的一个方法是then()方法。
  • 当完成一个step时,casperjs会去检查三个状态标识pendingWait, loadInProgress, and navigationRequested,当这三个标识只有任意一个为true时,就会挂起等待,直到全部为false时才会进行下一个step。

casperjs也提供了查看具体step的方法:

1
2
3
require('utils').dump(casper.steps.map(function(step) {
return step.toString();
}));

在控制台看到的打印的栈信息如下,其中有一个_step(),这个是CasperJs自动帮我们加的。

更多疑问,参考这里

参考