2014-04-05 70 views
0

我試圖找到一種方法來檢測單擊事件是否由頁面上的某個元素處理或不是。現在在我們的一些渲染過程中,點擊事件不會被處理。這使我們的自動化測試團隊變得非常困難,因爲他們無法分辨他們生成的點擊事件是否實際上正在處理中。目前,他們必須等待X頁面沒有改變的時間。這可以爲每次點擊增加1 1/2秒,這實際上會減慢測試的速度。我想找到一種方法來檢測點擊是否被處理。我可以在聽衆的頂部放置一個聽衆,當事件回到起點時,它會看到它。但是我不知道事件是否也在文檔中進一步處理。如何判斷是否沒有元素有聽衆要求點擊事件

任何人都可以想出一種方法來檢測單獨處理事件的頂層元素與處​​理事件的頂層元素以及底層元素之間的區別,而不需要爲每個底層元素在監聽器中設置一些邏輯。

我希望這是有道理的,

+0

您可以將事件偵聽器放在頁面上的測試對象上(可能是右下角),並且只有在成功獲取測試對象的點擊後纔開始播放常規的點擊事件? – jfriend00

回答

0

如果你包裹自己的包裝API中的附加事件監聽器,你可以在你的自動化測試環境中執行時,很容易修改的事件對象。

function attachEventListener(node, event, handler) { 
    // only do this if we are running in the test environment 
    if (window.__runningAutomatedTests) { 
    // wrap the event handler in a handler that will 
    // amend the event object 
    handler = (function(innerHandler) { 
     return function(evt) { 
     // invoke the actual event handler 
     var result = innerHandler.apply(this, arguments); 
     // amend the event object with information 
     // about that one of our event handlers handled 
     // it 
     evt.__wasHandled = true; 

     return result; 
     } 
    })(handler); 
    } 
    node.addEventListener(event, handler); 
    return function removeEventListener() { 
    node.removeEventListener(event, handler); 
    }; 
} 

attachEventListener(window.document.body, 'click', function(evt) { 
    if (evt.__wasHandled) { 
    // event was handled by a different handler before! 
    } 
}); 

我不明白,如果不掛鉤到較低級別的事件處理程序,這將如何工作。

+0

我以類似的解決方案結束了。我無法找到一種方法來實現它,而不需要掛在較低級別的事件處理程序上。我只是希望有一種我不知道的本地方式。 – Marc

相關問題