2015-11-02 46 views
0

我想獲取DOMElements並單擊它們中的每一個。之後,我想對響應運行斷言。CasperJS/PhantomJS獲取節點並單擊它們

var nodes = this.evaluate(function(){ 
    var nodes = document.querySelectorAll('.editable .action'); 
    return nodes; 
}); 

//Print the base URI for the node 
for (i = 0; i < nodes.length; ++i) { 
    if(null != nodes[i]){ 
     require('utils').dump(nodes[i].baseURI); 
    } 
} 

我有5個節點是匹配的,但節點[0]是唯一不爲空的節點。其餘的在CasperJS中是空的。然而,在Chrome瀏覽器中運行相同的測試,我得到所有節點,它們都不爲空。

回答

1

CasperJS建立在PhantomJS之上,具有相同的侷限性。其中一個限制是存在兩個上下文,並且可以訪問DOM的頁面上下文被沙箱化。無法將諸如DOM節點之類的非原始對象從頁面上下文中傳出。

Documentation

注:參數和返回值的evaluate功能必須是一個簡單的原始對象。經驗法則:如果它可以通過JSON序列化,那麼它很好。

閉包,功能,DOM節點等將不是工作!

您無法將其與Chrome進行比較,因爲Chrome在正常操作中沒有兩個上下文。

您可以將DOM節點的表示通過頁面上下文。 CasperJS有一些便利功能,如casper.getElementsInfo(selector)

如果你想點擊每個元素,然後有不同的方式來實現,取決於如何在網頁上定位元素。我的回答here顯示了頁面上下文以外的兩種CSS選擇器和XPath表達式。

參見:

+0

感謝您徹底的迴應。我會查看你提供的信息。 – MontrealDevOne

相關問題