2014-10-20 45 views
0

由於某些原因,每當我嘗試點擊一個使用CasperJS的按鈕時,它都不會實際響應。我渲染了一個截圖,就好像它從來沒有點擊過它一樣。用casperjs點擊按鈕時沒有反應

phantom.casperPath = './modules/'; 
phantom.injectJs(phantom.casperPath +'/bin/bootstrap.js'); 
var system = require('system'); 
var utils = require('utils'); 
var casper = require('casper').selectXPath; 

var casper = require('casper').create({ 
    verbose: false, 
    logLevel: 'debug' 
}); 

casper.options.viewportSize = {width: 1920, height: 1080}; 

casper.start(); 
casper.thenOpen('https://mydomain.com', function(){ 
}); 

casper.then(function() { 
    this.fill('form#loginPage',{ 
     'user_name': 'myuser', 
     'user_password': 'mypassword' 
    },false); 
    casper.wait(100); 
}); 
casper.then(function(){ 
    this.click('#sysverb_login'); 
    casper.wait(100); 
}); 
casper.then(function(){ 
    this.capture('test.png'); 
    this.echo('success'); 
    this.exit(); 
}); 
casper.run(function() { 
}); 
+0

你有什麼期望點擊按鈕後發生(新頁面已加載,頁面上發生了什麼......)?請修正您的格式。 – 2014-10-20 19:55:50

+0

嘗試將捕捉移入其自己,或在捕捉之前添加暫停 – Nick 2014-10-20 19:59:13

+0

我嘗試添加一個暫停,但這不起作用。 – Matt 2014-10-20 20:33:51

回答

2

它不建議使用then頁面加載後,我quote from the docs: -

步驟的功能加入到然後()在兩個不同的情況下進行處理:

  1. 當執行了上一步功能時,執行前一個主要HTTP請求並加載頁面時,執行
  2. ;

請注意, 沒有加載頁面的單一定義; DOMReady 事件是否已觸發?它是「所有請求正在完成」嗎?是否 *正在執行所有應用程序邏輯「?或「所有元素被渲染」?答案總是取決於上下文。因此,爲什麼鼓勵您始終使用waitFor()系列方法來保持對您實際期望的內容的明確控制 。

一種常見的伎倆是使用waitForSelector():

嘗試(與選擇是頁面上看到更換SOMESELECTOR後回發生後): -

casper.then(function() { 
    this.fill('form#loginPage',{ 
     'user_name': 'myuser', 
     'user_password': 'mypassword' 
    },false); 
}); 

casper.then(function(){ 
    this.click('#sysverb_login'); 
}); 

casper.waitForSelector("SOMESELECTOR", function(){ 
    this.capture('test.png'); 
    this.echo('success'); 
    this.exit(); 
});