java - 如何从 Chrome 浏览器获取 Canvas 元素坐标

标签 java selenium-webdriver html5-canvas gojs

我确实尝试过许多 Chrome 扩展,但似乎它是从窗口顶部计算坐标,而不是只考虑 Canvas 。

我在这个页面:https://gojs.net/latest/samples/grouping.html

想要获取下面+按钮的坐标:

enter image description here

我实际上正在尝试使用 selenium 使用操作类来单击该 + 按钮,我的代码是:

  driver.get("https://gojs.net/latest/samples/grouping.html");
        WebElement flowCanvas = driver.findElement(By.xpath("//div[@id='myDiagramDiv']//canvas"));

            new Actions(driver)
                    .moveToElement(flowCanvas, 500, 200).click().perform();

因为我没有得到+按钮的精确坐标,所以上面的代码没有点击它。

最佳答案

我假设 500, 200 值是 flowCanvas HTML 元素坐标系中的 (x,y) 点。这是正确的吗?

首先,您需要获取您的应用为 HTMLDivElement 创建的 Diagram 对象,该对象包含 Canvas 和 GoJS 用于显示图表并支持编辑的其他元素。调用静态函数Diagram.fromDiv 为此。例如:

var myDiagram = go.Diagram.fromDiv(theDivElement);

然后您需要知道您要单击其按钮的的键。如果Group模板中的“SubGraphExpanderButton”有一个GraphObject.name并且您知道该名称是什么,您可以执行以下操作:

var group = myDiagram.findNodeForKey(groupKey);
if (!group) return;
var button = group.findObject(buttonName);
if (!button) return;
var docpt = button.getDocumentPoint(go.Spot.Center);
var viewpt = myDiagram.transformDocToView(docpt);
new Actions(driver)
    .moveToElement(flowCanvas, viewpt.x, viewpt.y)
    .click()
    .perform();

这与机器人示例中演示的技术相同: https://gojs.net/latest/extensions/Robot.html

嗯,您可能需要首先确保节点(或至少按钮)位于视口(viewport)内。调用Diagram.scrollToRect 首先。

关于java - 如何从 Chrome 浏览器获取 Canvas 元素坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57371956/

相关文章:

java - 合并List并保持数据的顺序且不存在重复项

java - 初学者 : How to identify errors in selenium webdriver

python - 更改新 URL 的 Selenium 驱动程序

javascript - 为什么不 moveTo(0, 0); lineTo(X, X);画一条45°线?

javascript - Canvas 中的缩放方法

java - 错误无法检测 ServletContainerInitializers Tomcat 8

java - 将 Android 输入移植到 Java 桌面应用程序

java - Apache Felix 和 Web 启动 : loading bundles

java.lang.IllegalArgumentException : Keys to send should be a not null CharSequence

javascript - FabricJS - 自由绘图模式下的 Canvas 混合模式