我使用PhantomJS 2點擊頁面的元素。但是,我不知道點擊這些元素是否會觸發事件(例如,頁面加載)。PhantomJS 2:檢測沒有觸發事件的點擊
我希望能夠處理這兩種情況下:
當一個元件上的點擊觸發頁面加載,然後我想等到新的頁面已經被加載。
當點擊不觸發事件時,我希望能夠識別(無需等待很長的超時)。
在PhantomJS 1,我可以簡單地使用一個封閉件的這樣的:
function click(page, elem, callback) {
var loading = false;
page.set('onLoadStarted', function() {
loading = true;
});
page.set('onLoadFinished', function() {
callback('click triggered page load');
});
triggerClick(page, elem);
setTimeout(function() {
if (! loading) {
callback('click did not trigger page load');
}
}, 100);
}
在這裏,我閉在loading
可變其充當之間的「通信信道」事件處理程序和函數setTimeout
。
萬一點擊觸發網頁加載時,
onLoadFinished
處理程序將調用回調的頁面加載後。如果點擊不觸發頁面加載,
setTimeout
中的函數將在100ms(這是可接受的)後調用回調函數。
此代碼已被PhantomJS下工作井1
在PhantomJS 2遺憾的是,對於onLoadStarted
和onLoadFinished
事件處理程序不能訪問的loading
變量(即他們不工作的關閉了,因爲它似乎)。
所以現在我想知道我如何能夠在PhantomJS 2中實現相同的行爲。任何想法?
PS:我知道,我必須通過page.property(...)
在PhantomJS 2安裝,而不是使用page.set(...)
像的事件處理程序PhantomJS 1
編輯:我使用的節點包幻象(https://www.npmjs.com/package/phantom)作爲節點& phantomjs之間的橋樑。
沒有'page.set'在PhantomJS(1或2)。你在node.js和PhantomJS之間使用某種橋樑嗎? –
嗯,是的確 - 我正在使用節點軟件包phantom(https://www.npmjs.com/package/phantom)。顯然忘了提及;)。但是,我想知道在哪種方式可能會涉及到我上述問題的解決方案...這實際上是這個節點橋而不是phantomjs本身的問題嗎? – Oliver