【问题标题】:How to get canvas element co-ordinates from chrome browser如何从 chrome 浏览器获取画布元素坐标
【发布时间】:2019-08-06 08:32:28
【问题描述】:

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

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

想得到下面+按钮的坐标:

我实际上正在尝试使用 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();

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

【问题讨论】:

    标签: java selenium-webdriver html5-canvas gojs


    【解决方案1】:

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

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

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

    那么你需要知道你想点击的Group的按键。如果 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

    嗯,您可能希望首先确保节点(或至少按钮)在视口内。请先致电Diagram.scrollToRect

    【讨论】:

    • 感谢您的回答,这里的问题是如何在我的代码中获得 myDiagram 的支持。主要是我在这里使用 java,我尝试将 myDiagram 与 javascipt 一起使用,但没有奏效。如果我想获得对 Java 中 goJs 的所有内置库的支持,是否需要导入任何文件或 maven 依赖项?
    • 我在上面的答案中添加了一段。我希望您应该能够以一种或另一种方式找到 HTML Div 元素。这可能很大程度上取决于您的应用使用的框架(如果有的话)。
    • 顺便说一句,最好不要引用可能在 HTMLDivElement 中的 HTMLCanvasElement。 GoJS 的实现可能会改变画布的数量,甚至改变是否有画布元素。
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2012-11-05
    • 2019-09-06
    相关资源
    最近更新 更多