CasperJS实践笔记(1)

CasperJS的执行workflow的一个问题(如果可以的话,请不要认为这是一个bug):

伪代码如下:

var casper = require("casper").create();
casper.start("http://xx.xx.com");
casper.then(function(){
    this.echo("AAAA");
    this.wait(1000, function(){
        this.echo("BBB");
    })
    this.echo("CCCC");
});
casper.run(){
    this.echo("...");
};

预期运行结果可以应该是这样吧:

AAAA

BBB

CCCC

...

实际运行结果其实这样:

AAAA

CCCC

BBB

...

CasperJS本身是一个使用python语言封装的PhantomJS测试框架,没有看过它的workflow具体实现;所以只能猜想:

方法casper.then和方法casper.wait组成workflow的逻辑,或者说是workflow执行单元;

而其他代码不被当作执行单元,所以必须包装在casper.then或者casper.wait内。

casper.wait是一个系列的API,另外还有waitForSelector、waitFor、waitWhileSelector、waitUntilVisible等等;

用的最多的就是this.waitForSelector,设置一个超时时间等待一个元素(Html element),如果找到了就怎样/如果超时就怎样。

所以实际项目中的代码大约如下:

this.then(function(){
    this.echo("start...");
    this.waitFor(
    /// ...
        )
    this.waitForSelector(
    //    ...
        )
})

this.then(function(){
    this.echo("start...");
    this.waitFor(
    /// ...
        this.waitForSelector(
    //    ...
            )
        )
})

(我的小项目自己一个人写,很多东西都在摸索阶段)

希望有经验的同仁不吝赐教!

时间: 2025-01-02 18:01:34

CasperJS实践笔记(1)的相关文章

CasperJS实践笔记(3)

CasperJS项目中方法的封装和调用问题,第二个遇到的workflow问题. 在其他代码中有几个方法,比如fun_A,fun_B,fun_C: 现在某个方法调用它们,有一个错误的示范: casper.then(function(){ this.echo("xxxx"); this.wait(function(){ this.echo("AAAA"); }) this.waitForSelector('', function(){ fun_a.call(this);

CasperJS实践笔记(2)

代码本来写在一个JS文件里面,执行方式如下: casperjs test xxx.js 可是代码超过1500行后,只有我自己看得明白,必须拆分(独立文件&逻辑复用)! 拆分后怎么执行呢?如下: casperjs test --includes=1.js,2.js,3,js,4.js testcase_code1.js --xunit=tesecase01_result.xml 文件1.js,2.js,3.js,4.js就是拆分出去的实现代码,testcase_code1.js可以当作是测试用例的

CasperJS实践笔记(5):Mac平台上teamcity和casperjs的结合

步骤如下: (1)启动Mac操作系统: (2)安装casperjs,phantomjs: (3)安装teamcity: (4)设置各种环境变量,设置teamcity直到可以打开网页: (5)网页上新建project: (6)使用command line方式运行casper用例脚本: (7)可以做成执行计划,设置执行时间和周期. 基本情况就是这样了---

CasperJS实践笔记(4)

casperJS的测试module casper.test.begin执行一串完整的测试动作,不过其中的对象this并非capser而是test! 只不过test对象本身具备casper的attribute,另外还有test module提供的attribute(提供了测试相关的诸多API). casper对象有很多很多options,下面说说这些options的设置,options允许我们设置一些默认值.userAgent.定制功能.等等. 举例如下: casper.options.pageS

hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览

对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看start-dfs.sh可以看出,namenode是通过bin/hdfs命令来启动 $ vi start-dfs.sh # namenodes NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes) echo "Starting namenodes o

PHP核心技术与最佳实践--笔记

<?php error_reporting(E_ALL); /* php 5.3引入 延迟静态绑定 */ /* php5.4引入trait,用来实现多层继承 trait Hello{} trait World{} class MyHelloWorld{ use Hello,World; } */ /* php4时代 php是不支持析构函数的*/ /* php中数组索引是字符串,但是没有使用引号,php就将其认为是一个常量,找不到在视为变量 */ /** * php中的异常必须手动 * 可以结合错

udacity android 实践笔记: lesson 4 part a

udacity android 实践笔记: lesson 4 part a 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 联系:1307316一九六八(短信最佳) 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处. tips:https://code.csdn.net/titer1/pat_aha/blob/mast

udacity android 实践笔记: lesson 4 part b

udacity android 实践笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 联系:1307316一九六八(短信最佳) 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处. tips:https://code.csdn.net/titer1/pat_aha/blob/mast

COMET探索系列一【COMET实践笔记】

转:http://www.cnblogs.com/hackboy/p/3687627.html COMET探索系列一[COMET实践笔记] 这几天在给公司的一个点对点聊天系统升级,之前只是使用简单的ajax轮询方式实现,每5秒钟取一次数据,延时太长,用户体验不是很好,因此打算采用服务器推送技术,故此整理了以下文档,将自己找到的一些资料及心得与大家在此分享.本文主要综述了Comet相关的概念.应用场景.常用的两种实现模型.及PHP实现代码. 概    念:Comet,基于 HTTP 长连接的“服务