2013-07-02 102 views
1

我有我的幻影Js代碼的問題,如下所示,我有代碼來測試我的朋友Web服務器(使用節點Js)。實際上,它看起來很簡單,完美運行。使用PhantomJs登錄測試

var page = require('webpage').create(); 

var address = "http://localhost:3333"; 

// Route "console.log()" calls from within the Page context to the 
// main Phantom context (i.e. current "this") 
page.onConsoleMessage = function(msg) { 
    console.log("Console.log: ", msg); 
}; 

page.onAlert = function(msg) { 
    console.log("Alert:", msg); 
}; 

page.open(address, function (s) { 
    page.evaluate(function() { 
    function click(el){ 
     var ev = document.createEvent("MouseEvent"); 
     ev.initMouseEvent(
     "click", 
     true /* bubble */, 
     true /* cancelable */, 
     window, null, 
     0, 0, 0, 0, /* coordinates */ 
     false, false, false, false, /* modifier keys */ 
     0 /*left*/, null 
    ); 
     el.dispatchEvent(ev); 
    } 
    document.getElementById('username').value = 'MyName'; 
    document.getElementById('password').value = 'MyWord'; 
    click(document.querySelector('input[type=submit]')); 
    }); 

    page.onNavigationRequested = function() { 
    // console.log("Moved", JSON.stringify(arguments)) 
    // to check whether send or not 
    page.render("printscreen" + ".png"); 
    }; 

    setTimeout(function(){ 
    page.render("nextprintscreen" + ".png"); 
     phantom.exit(); 
    }, 3000); 
}); 

當我宣佈
var userName = 'MyName';
var passWord = 'MyWord';
然後將它放在下面
var address = "http://localhost:3333";
和交流
document.getElementById('username').value = 'MyName';
document.getElementById('password').value = 'MyWord';

document.getElementById('username').value = userName;
document.getElementById('password').value = passWord;

它從我的朋友Web服務器返回invalid username or password。你能幫我弄清楚爲什麼會發生嗎?這是我第一個'javascript世界'的代碼。

我已經讀過this questionanother variation然後a suggestion

,但它只是讓我更加迷惑。

感謝,
艾哈邁德

回答

1

問題是page.evaluate()是沙箱,所以有你的幻像腳本變量的訪問權限。

由於PhantomJS 1.6,JSON序列化參數可以傳遞給page.evaluate()。 參數和評估函數的返回值必須是簡單基本對象。但是,可以通過JSON序列化一個對象。

您可以更改您的代碼如下:

page.evaluate(function (login, pwd) { 
    ... 
    document.getElementById('username').value = login; 
    document.getElementById('password').value = pwd; 
    ... 
}, userName , passWord); 
+0

感謝..我會嘗試明天..現在我在休息.. ^^。 –

+0

它像河流一樣工作。不管怎麼說,還是要謝謝你。 –