如何通过坐标(使用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);