我的页面上有一个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)
答案 0 :(得分:3)
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的结合确实如此。我的测试套件失败只是因为原生事件不可用。
答案 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);