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

时间:2013-11-29 11:55:27

标签: ruby canvas selenium watir watir-webdriver

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

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:3)

运动

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

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

相关documentation

火狐

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

答案 1 :(得分:1)

我让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();
祝你好运!

答案 2 :(得分:0)

下载最新的selenium webdriver 2.42.1.Tested并且它在firefox中工作

答案 3 :(得分:0)

            Robot robot = new Robot();
            robot.delay(3000);

            robot.mouseMove(x, y);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);