Jquery 自动单击画布对象

Jquery 自动单击画布对象,jquery,selenium,html5-canvas,automated-tests,Jquery,Selenium,Html5 Canvas,Automated Tests,我想自动单击HTML5画布对象,以便运行基于Selenium的自动测试。我浏览了许多关于自动触发点击事件的资源,如本例所示: 下面是关于在画布中创建可单击对象的示例: 我尝试结合这两个示例来创建一个可自动单击的画布对象。但由于某种原因,我无法使它工作。我在第二个示例中添加了以下代码,并希望自动单击坐标(305340)中的对象 var e=jQuery.Event(“单击”{pageX:305,pageY:340}); $('#myCanvas')。触发器(e)这里是对上面的示例代码的修改

我想自动单击HTML5画布对象,以便运行基于Selenium的自动测试。我浏览了许多关于自动触发点击事件的资源,如本例所示:

下面是关于在画布中创建可单击对象的示例:

我尝试结合这两个示例来创建一个可自动单击的画布对象。但由于某种原因,我无法使它工作。我在第二个示例中添加了以下代码,并希望自动单击坐标(305340)中的对象

var e=jQuery.Event(“单击”{pageX:305,pageY:340});

$('#myCanvas')。触发器(e)这里是对上面的示例代码的修改

$( 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 );

});

下面是一个工作示例>>

您是否尝试过在画布对象上使用单击坐标。我遇到了一个类似的情况,我必须单击画布中的一个元素,下面的代码就做到了

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

我终于解决了这个问题。我将所有显示对象的当前实例存储在一个数组中

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 () {
}
}

通过这种方式,我可以访问画布中的对象,而不会对画布造成太多干扰。

谢谢您的回答,但我正在尝试单击画布中的特定对象,而不是整个画布。例如,坐标(300100)处的可单击矩形。由于画布不保留其对象的引用,因此自动单击似乎很困难。您知道坐标是什么吗?或者坐标会改变吗?出于测试目的,是的,我知道坐标会是什么,但是在实际使用中,这些对象可以被拖动,以便它们的坐标可以改变。啊,好的,我想我现在明白了,我已经更新了上面的答案,在你的问题中包含了对代码的修改,以及一个工作的JSFIDLE链接谢谢你的帮助,我终于解决了这个问题。我将所有显示对象的当前实例存储在一个数组中。所有这些对象都分配了一个id,因此我可以通过它们的id访问这些对象及其当前位置。稍后,当我必须单击特定对象时,我搜索该数组中的对象并获取其x和y位置,然后简单地覆盖pageX和pageY值。