CasperJS多个捕获截图:最新截图覆盖所有以前的ojnes

时间:2016-06-16 15:56:44

标签: javascript casperjs

我目前正在深入CasperJS并真正享受它。但是,也许这是我在文档中遗漏的东西,我似乎遇到了casper.capture()的问题。我目前在测试失败时操作我的捕获程序,并将其放在单独的安装模块中,如下所示

function captureFailure(filename){
    casper.test.on("fail", function(failure){
        casper.viewport(1280, 1024);
        casper.capture("failedScreenshots/Failure-"+filename+".jpg", {
            top: 0,
            left: 0,
            width: 1280,
            height: 1024
        });
    });
}

exports.captureFailure = captureFailure;

然后将其放入我的测试中:

.  .  .
// setup
setup.login();

// test
casper.test.begin("Complete new social campaign flow with image as a      signed in user.", 16, function suite(test) {
// setup captureFailure
    setup.captureFailure("SocialFlowImage");  

    casper.start(data.baseURL+'/campaigns/', function(){
        console.log("Campaign page loaded");
        this.click(campaignCreate);
        casper.waitForSelector(socialCampaignCreateModal, function(){
            test.assertExists(socialCampaignCreateModal, 'Modal pops up');
            test.assertTextExists('Deal', 'Deal button exists');
            test.assertTextExists('Marketing Email', 'Marketing Email button exists');
            test.assertTextExists('Facebook', 'Facebook button exists');
        });
    });
.  .  .

在大多数情况下,这是独立工作,但当我同时运行所有测试以测试多个故障时,屏幕截图随着它们的进行而被覆盖。按时间顺序,它看起来像这样:

测试1 - >测试1失败 - >捕获屏幕截图1 - >测试2 - >测试2失败 - >捕获屏幕截图2,然后覆盖屏幕截图1

这导致两个相同的屏幕截图,但命名惯例不同。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

想出我在“失败”事件上有重叠的事件处理程序。为了解决这个问题,改变了我的casperjs测试样式以包含带有setUp和tearDown函数的测试对象,通过执行

删除事件句柄

casper.test.removeListener("fail", casper.test.listeners("fail")[0]);

哪个有点hacky,但是我的自定义事件处理程序传入了filename arg用于唯一的屏幕截图名称,并且更容易调试/识别哪个测试运行了什么。因此,我必须使用jimmy rig it,因为我的setUp实际上有一个附加它的匿名函数。