如何通过坐标(使用WebDriver)单击canvas中的特定元素?

我的页面上有一个canvas元素,我想点击这个canvas中的特定(x,y)坐标。 我用watir-webdriver:

element = browser.driver.find_element(:id, 'canvas') browser.driver.action.move_to(element).move_by(x, y).click().perform 

但是这段代码只是点击canvas的中心,而不是指定的(x,y)坐标。 这有什么问题?

UPD:现在我使用这段代码:

 element = browser.driver.find_element(:id, 'canvas') browser.driver.action.move_to(element, x, y).perform browser.driver.click.perform 

但它仍然点击canvas的中心而不是指定的(x,y)坐标……有什么想法吗?

UPD 2:这只是FIREFOX问题(适用于Chrome)

运动

move_to(element)移动到指定元素的中心, move_by是相对移动。 因此,在这两个操作结束时,您已移动到坐标(x of element center + x, y of element center + y)

你应该使用move_to(element, x, y) 。 这将移动到相对于元素原点的x, y坐标。

相关文件 。

火狐

您使用的是Selenium和Firefox的版本,Selenium支持原生事件吗? Selenium 2.37与Firefox 24的组合确实如此。 我的测试套件失败只是因为原生事件不可用。

我使用以下方法让Selenium在Canvas元素中选择一个区域:

 public void selectCanvasArea(int xCanvas, int yCanvas, int xTarget, int yTarget) { action.moveToElement(driver.findElement(By.id("Canvas")),xCanvas,yCanvas) //(300,300) .clickAndHold() .moveByOffset(xTarget,yTarget) //(600,150) .release() .perform(); 

祝好运!

下载最新的selenium webdriver 2.42.1.Tested,它在firefox中运行

  Robot robot = new Robot(); robot.delay(3000); robot.mouseMove(x, y); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK);