Java 元素在画布中不移动
我想在画布中移动元素,但不知何故,它并没有发生 我试过的代码:Java 元素在画布中不移动,java,selenium-webdriver,gojs,Java,Selenium Webdriver,Gojs,我想在画布中移动元素,但不知何故,它并没有发生 我试过的代码: Actions actions = new Actions(driver); actions.moveToElement(flowCanvas, 434, 177); actions.clickAndHold(); actions.moveToElement(flowCanvas, 592 , 373); actions.release();
Actions actions = new Actions(driver);
actions.moveToElement(flowCanvas, 434, 177);
actions.clickAndHold();
actions.moveToElement(flowCanvas, 592 , 373);
actions.release();
actions.perform();
我的xpath:
@FindBy(xpath = "//div[@id='diagramDiv']//canvas")
protected WebElement flowCanvas;
我正在尝试的URL:https://gojs.net/latest/samples/panelLayout.html
我正在使用SeleniumWebDriver和Java。我并没有在上面的代码中得到任何错误,但它也不会移动元素
正在尝试移动以下元素:
尝试操作和操作组合
Actions builder = new Actions(driver);
Action moveAction = builder.moveToElement(flowCanvas,434,177)
.click()
.moveByOffset(592, 373)
.doubleClick()
.build();
moveAction.perform();
基本上,问题在于所使用的坐标和所使用的bowser/web驱动程序实现。状态为动作命令偏移距图元的中心。但并非所有的web驱动程序实现都遵循这一点。因此,gecko驱动程序(Firefox)的
moveToElement
x和y偏移量基本上是从画布中心开始计算的,而Chrome驱动程序(Google Chrome)的坐标值是从左上角开始计算的。所以,如果你想要一个跨borwser的拖放支持,你需要这样的东西
WebDriver driver = getDriver();
driver.get("https://gojs.net/latest/samples/panelLayout.html");
WebElement flowCanvas = driver.findElement(By.xpath("//div[@id='myDiagramDiv']//canvas"));
if(isGoogleChrome()){
new Actions(driver)
.moveToElement(flowCanvas, 100, 125).clickAndHold()
.moveToElement(flowCanvas, 150, 175).release()
.perform();
} else if (isFireFox()){
new Actions(driver)
.moveToElement(flowCanvas, -50, -50).clickAndHold()
.moveToElement(flowCanvas, 100, 100).release()
.perform();
}
如您所见,对于firefox,您必须使用负值将鼠标从画布的中心移动到左上角元素,而对于chrome,您需要将鼠标向下和向右移动一点。我尝试使用Sikuli移动该对象,效果非常好。请检查下面的代码片段
Pattern p = new Pattern("Win/AboutScreen/Move.PNG");
Region r1 = screen.exists(p);
r1.hover();
r1.mouseDown(Button.LEFT);
r1.mouseMove(50, 50);
r1.mouseUp(Button.LEFT);
您需要在某个位置保存一个屏幕截图,并提及路径<代码>悬停()方法将找到屏幕并将鼠标悬停在其上mouseDown(Button.LEFT)
将保持按住鼠标左键,最后一个mouserMove(50,50)
将移动元素到坐标
如果您使用的是Maven项目,那么安装Sikuli非常容易,只需添加一个简单的依赖项,您就完成了
希望有帮助:)它不会移动,伙计。这些数字(offsetX和offsetY)应该在什么坐标系中?您使用的X值似乎太大,无法操纵图中四个节点的左上角节点。@WalterNorthwoods-您能告诉我如何获得要移动的控件的精确坐标吗?描述GoJS图中的坐标系
myDiagram.nodes.first()。位置在文档坐标中<代码>myDiagram.transformDocToView(myDiagram.nodes.first().location)
在视口坐标中生成一个点。嘿,非常感谢您的回答。你们能告诉我你们是怎么得到这些元素的坐标的吗?我已经在chrome中为x和y安装了一些扩展,但它显示了其他坐标,请检查:显然,工具的坐标不正确,因为工作div定义为400px上的400px,因此无法将502作为任何坐标。我正在使用Firefox开发工具中的标尺。但是,您可以通过执行myDiagram.transformDocToView(myDiagram.nodes.first().location)来获得chrome的坐标它将返回第一个节点的左上角坐标,以便您可以在执行单击操作之前添加5或10 px,以确保您单击了该节点。@Babl-我正在尝试在一个包含两个画布的页面上进行拖放操作,从一个画布拖到另一个画布,但无法将元素移出第一个画布。有什么想法/建议吗?@misha需要一个你正在做什么的例子,没有代码就帮不上忙示例我的朋友谢谢,但我的画布有500多个控件,我无法用500个截图来移动每个控件