2015-06-28 60 views
1

我想自動點擊一個HTML5畫布對象,以便我可以運行基於Selenium的自動化測試。我經歷了許多資源走遍自動觸發點擊事件如下例所示: Trigger Click自動點擊畫布對象

以及有關在畫布上進行點擊的對象這個例子: Clicking Canvas Objects

我想這兩個例子結合起來,使一個自動點擊畫布目的。但由於某種原因,我無法使其工作。我在第二個示例中添加了以下代碼,並且預計會自動單擊座標中的對象(305,340)。

var e = jQuery.Event("click", { pageX: 305, pageY: 340 }); 
 
$('#myCanvas').trigger(e);

var e = jQuery.Event("click", { pageX: 305, pageY: 340 }); $('#myCanvas').trigger(e);

缺少什麼我在這裏? 「點擊畫布」和「點擊畫布對象」的不同概念?請幫忙。

非常感謝您提前。

回答

1

我終於解決了這個問題。我將所有顯示對象的當前實例存儲在一個數組中。

var node = new Array(); 
for((var i in currentProject.rectangle)){ 
node.push(toArray(currentProject.rectangle[i])); 
} 

所有這些對象被分配一個ID,所以我可以通過他們的ID訪問這些對象和他們的當前位置。稍後當我不得不點擊特定的對象時,我搜索了該數組中的對象並獲取其x和y位置,並簡單地覆蓋pageX和pageY值。

clickedX = currentProject.rectangle[ID].x; 
clickedY = currentProject.rectangle[ID].y; 
clickData = {x: clickedX, y: clickedY}; 

SimulatedClickEvent(clickData); 

function SimulatedClickEvent(data) { 
this.pageX = data.x; 
this.pageY = data.y; 
this.preventDefault = function() { 
} 
} 

這樣我就可以訪問畫布中的對象而不會干擾畫布。

0

這裏的示例代碼的修改你在上面

$(document).ready(function() { 

    // canvas 
    var x = 20; 
    var y = 20 
    var canvas = document.getElementById('canvas'); 
    var ctx = canvas.getContext('2d'); 
    ctx.fillRect(x, y, 25, 25); 

    // canvas click 
    $("canvas").on({ 
     click: function(e){ 
      alert(e.pageX +", "+ e.pageY); 
     } 
    }); 

    // jquery event 
    var l = $("canvas").offset().left; 
    var t = $("canvas").offset().top; 
    var eve = jQuery.Event("click", { pageX: x+l, pageY: y+t }); 
    $("canvas").trigger(eve); 

}); 

已經得到了這裏的工作示例>>http://jsfiddle.net/goutgffw/1

+0

感謝您的回答,但我試圖點擊畫布中的特定對象而不是整個畫布。例如,座標爲(300,100)的可點擊矩形。由於畫布不保留對象的引用,所以自動點擊似乎很棘手。 – Jalesa

+0

你知道座標是什麼嗎?或者會不會改變座標? – Nick

+0

出於測試目的是的,我知道座標將是什麼,但在實際使用中,這些對象可以被拖動,以便它們的座標可以改變。 – Jalesa

0

您是否嘗試過使用Canvas對象上的點擊座標。我遇到了類似的情況,我必須點擊畫布中的一個元素,下面的代碼才能做到這一點。

Actions clickAt = new Actions(driver); 
clickAt.moveToElement(canvasElement, xCoordinates, yCoordinates).click(); 
clickAt.build().perform();