2016-06-16 4 views
0

Ich arbeite gerade an CasperJS und genieße es wirklich. Aber vielleicht ist es etwas, was ich in der Dokumentation verpasst habe, ich habe Probleme mit casper.capture(). Ich habe zur Zeit Mine zurechtgebastelt zu erfassen, wenn ein Test fehlschlägt, und legen Sie sie in einem separaten Setup-Modul wie untenCasperJS Screenshots von mehreren Screenshots: Der letzte Screenshot überschreibt alle vorherigen Bilder

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; 

Diese wird dann wie so in meinen Tests setzen:

. . . 
// 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'); 
     }); 
    }); 
. . . 

Für die Das meiste funktionierte alleine, aber als ich alle meine Tests im Tandem durchführte, um mehrere Fehler zu testen, wurden die Screenshots im Laufe der Zeit überschrieben. In chronologischer Reihenfolge sah es so etwas wie diese:

Test 1 -> Test 1 Ausfall -> Capture-Screenshot 1 -> Test 2 -> Test 2 Ausfall -> Capture-Screenshot 2 und anschließend Screenshot 1

überschreibt

Und das führte zu 2 der gleichen Screenshots aber unterschiedlicher Namenskonvention.

Irgendwelche Ideen?

Antwort

0

Es stellte sich heraus, dass ich überlappende Event-Handler auf das Ereignis "fail" hatte. Um dies zu beheben, änderte meinen casperjs Test Stil, um das Testobjekt mit Auf- und Abbau-Funktionen zu umfassen, entfernt das Ereignis behandelt, indem Sie

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

die ein bisschen hacky, aber mein benutzerdefinierten Event-Handler hat eine filename arg Eingereicht für einzigartige Screenshot-Namen und einfacher mal Debuggen/Identifizieren welcher Test was lief. Als Folge muss ich jimmy riggen, da mein Setup tatsächlich eine anonyme Funktion hat, die es anbringt.