2012-05-19 61 views
1

在具有附加到javascript的href錨點的系統上測試CasperJS。照常進行使用href/Javascript訪問錨點

casper.then(function() { 
this.evaluate(function() { 
//  document.querySelector('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]').click(); // works in FF 
// window.onload=submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 

     //eval("submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH_1');"); 
//submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 
// window.onload=submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 

//  this.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  self.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  this.this.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
.. 

}); 

}); 

上述方法都無效。項目的Git倉庫表明,Casper有一個CasperUtils/ClientUtils庫,其中似乎有一個__utils__,它具有一個點擊方法,可以調用href="javascript:foo()"元素。

但是,我似乎無法弄清楚如何讓這個運行。

如果有人使用過CasperJS,並且有一個關於如何實現的代碼示例,我們會很感激!

理想的情況下,最終的結果應該是這樣的:

casper.then(function() { 
    e=document.querySelector("id['foo']"); 
    CasperUtilsSomething.click(e); 
}); 

或者,如果你有一個指針,我可以運行一個測試代碼的情況下,這將讓我們看看這是應該如何實現。

+2

在使用這些庫之前,應該先閱讀一些教程。 – Andreas

+0

Andreas。你好。謝謝回覆。我試圖閱讀所有我能找到的關於如何實現這一點的內容。你有任何關於如何實現這個的教程的知識。我找不到任何東西,包括youtube,GIT回購協議,支持論壇,郵件列表檔案等。任何其他你可以想到的地方?我只是把這裏當成了最後一個問題。 –

+0

「湯姆」(又名布魯斯),幫你一個忙,做這個教程http://ejohn.org/apps/learn/ - 這樣你可能會明白更多這裏發生了什麼 – NiKo

回答

1

看起來這裏的問題是圍繞函數範圍的混淆。這是關於使用PhantomJS(CasperJS構建於其上)的棘手問題 - 有兩個完全獨立的示波器,其中一個運行在PhantomJS環境中,可以訪問casper對象,以及遠程的「沙箱」示波器代碼運行 - 例如,在casper.evaluate()中運行的任何東西都在遠程上下文的沙箱中運行,而無法訪問casper對象或其方法。

所以試圖調用內casper.evaluate()this.click()是要失敗的 - 你正在運行的功能,具有對casper實例進不去,並this將參照window對象在瀏覽器中。

通常情況下,你會做到這一點的方法就是:

casper.then(function() { 
    casper.click('#CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 
    casper.evaluate(function() { 
     // some function that needs to run after clicking 
    }); 
}); 

還要注意的是,據我所知,你一般不能在casper.evaluate()運行任何代碼window.onload - 窗口的load事件就已經在您運行代碼時已經解僱了。