2014-09-01 45 views
0

執行腳本時,它將永遠不會到達「我永遠不會執行」的行。CasperJS(SlimerJS引擎),在評估後步驟不會繼續

/*********/

var casper = require('casper').create(
{ 
    //clientScripts: ["includes/jquery-1.11.1.min.js"], 
    waitTimeout: 15000, 
    stepTimeout: 5500, 
    verbose: true, 
    logLevel: 'debug', 
    viewportSize: { 
     width: 1680, 
     height: 1050 
    }, 
    onRunComplete: function() { 
    // Don't exit on complete. 
    }, 
    onWaitTimeout: function() { 
     logConsole('Wait TimeOut Occured'); 
     this.capture('xWait_timeout.png'); 
     this.exit(); 
    }, 
    pageSettings: { 
     "ignoreSslErrors": true 
    }, 
    onStepTimeout: function (self, m) { 

    } 
} 
); 

var subjectParameter = casper.cli.get("subject"); 
var timeoutForScreenshot = casper.cli.get("timeoutForScreenshot"); 
casper.options.stepTimeout = timeoutForScreenshot + 500; 

casper.on('step.timeout', function (request) { 
    console.log("---------------STEP:timed out---------------------:" + request); 
    request.abort(); 
}); 

casper.start('https://email.t-online.de', function() { 

    casper.userAgent('Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko)'); 

    casper.waitForSelector('input[name=pw_usr]', function() { 

     this.fillSelectors('form[name="login"]', { 
      'input[name=pw_usr]': '[email protected]', 
      'input[name=pw_pwd]': 'somePassword' 
     }); 

    }, function() { 
     casper.log('no login-form found', 'error'); 
     casper.exit(); 
    }); 

    casper.then(function() { 
     this.click("#pw_submit"); 
    }); 

    casper.waitForSelector('#rowListContainerTable', function() { 
     //abort.request(); 

     this.evaluate(function getElementInDom(term) { 

      var els = document.getElementsByTagName('span'); 
      var len = els.length; 

      for (var i = 0; i < len; i++) { 
       if (els[i].innerHTML.indexOf(term) != -1) { 
        els[i].click(); 
        abort.request(); 
       } 
      } 

     }, subjectParameter); 

     this.then(function() { 
      this.echo("I WILL NEVER BE EXECUTED"); 
     }); 

     this.wait(8000, function() { 
      this.capture('tonline - ' + subjectParameter + '.png', { 
       top: 0, 
       left: 0, 
       width: 1680, 
       height: 1050 
      }); 

      casper.log('mail found', 'error'); 
      //casper.exit(); 
     }); 

    }, function() { 
     casper.log('login failed', 'error'); 
     casper.exit(); 
    }); 

}); 

casper.run(); 

「subjectParameter」 是一個字符串

「timeoutForScreenshot」 是一個int值

腳本被登錄到「https://email.t-online.de」,並尋找一個電子郵件的主題==「subjectParameter」,它打開郵件,並應該截圖,但之後,「getElementInDom-Step」之後的所有其他「步驟」將不會執行。

有沒有辦法在step.timeout之後繼續下一步「step」?

+0

如果'abort'不是頁面上下文中的全局屬性,並且for循環不會進一步執行,'abort.request();'將產生錯誤。另請參閱[這裏](http://stackoverflow.com/q/15739263/1816580)如何點擊頁面上下文中的元素。這不應該是slimerjs的問題。 – 2014-09-02 07:40:37

回答

0

答: 忽略一個特定的請求URL(從googleadservices)這樣的:

casper.on('resource.requested', function (requestData, request) { 
    if (requestData.url.indexOf('xplosion') != -1) { 
     request.abort(); 
    } 

}); 

和它的工作!