17

我目前正在尝试将光标移动到org.openqa.selenium.Point已通过检查实时图表上是否出现标记来设置的点 ( ),我无法从中获得任何详细信息,但可以找到 X 和 Y 坐标。

如何将鼠标移至所述点以打开底层 JavaScript 菜单?

当前代码

//finds marker on the current web page

Point image = page.findImage("C:\\Pictures\\marker.png") ;

//move mouse to this x,y location 

driver.getMouse().mouseMove((Coordinates) image);

这不起作用,因为Point不能强制转换为org.openqa.selenium.interactions.internal.Coordinates.

4

9 回答 9

15

恕我直言,您应该注意Robot.class

尽管如此,如果您想物理移动鼠标指针,您需要使用 Robot 类采取不同的方法

  Point coordinates = driver.findElement(By.id("ctl00_portalmaster_txtUserName")).getLocation();
  Robot robot = new Robot();
  robot.mouseMove(coordinates.getX(),coordinates.getY()+120);

Webdriver 提供文档坐标,因为 Robot 类是基于屏幕坐标的,所以我添加了 +120 来补偿浏览器标题。
屏幕坐标:这些是从用户计算机屏幕的左上角测量的坐标。您很少会得到坐标 (0,0),因为它通常在浏览器窗口之外。大约唯一需要这些坐标的情况是,如果要将新创建的浏览器窗口放置在用户单击的位置。在所有浏览器中,这些都位于event.screenX和中event.screenY
窗口坐标:这些是从浏览器内容区域的左上角测量的坐标。如果窗口是垂直或水平滚动的,这将不同于文档的左上角。这很少是你想要的。在所有浏览器中,这些都在 event.clientX 和 event.clientY 中。
文档坐标:这些是从 HTML 文档的左上角测量的坐标。这些是您最常需要的坐标,因为这是定义文档的坐标系。

更多细节你可以在这里

希望这对您有所帮助。

于 2012-10-19T15:59:32.767 回答
14

为什么在org.openqa.selenium.interactions.Actions.class可以正常工作时使用java.awt.Robot ?只是在说。

Actions builder = new Actions(driver);

builder.keyDown(Keys.CONTROL)
   .click(someElement)
   .moveByOffset( 10, 25 );
   .click(someOtherElement)
   .keyUp(Keys.CONTROL).build().perform();
于 2014-03-28T18:14:22.973 回答
2

我正在使用 JavaScript,但我确信其中一些原则很常见。

我正在使用的代码如下:

    var s = new webdriver.ActionSequence(d);
    d.findElement(By.className('fc-time')).then(function(result){
        s.mouseMove(result,l).click().perform();
    });

driver = d. _ location = l很简单-它{x:300,y:500)只是一个偏移量。

我在测试过程中发现,如果不首先使用该方法来查找现有元素,我无法使其工作,并以此为基础从哪里找到我的点击。

我怀疑定位中的数字比我想象的更难预测。

这是一个旧帖子,但这个回复可能会帮助像我这样的其他新人。

于 2016-01-06T14:36:56.830 回答
0

解决方案是以这种方式实现匿名类:

        import org.openqa.selenium.Point;
        import org.openqa.selenium.interactions.HasInputDevices;
        import org.openqa.selenium.interactions.Mouse;
        import org.openqa.selenium.interactions.internal.Coordinates;

        .....

        final Point image = page.findImage("C:\\Pictures\\marker.png") ;

        Mouse mouse = ((HasInputDevices) driver).getMouse();

        Coordinates imageCoordinates =  new Coordinates() {

              public Point onScreen() {
                throw new UnsupportedOperationException("Not supported yet.");
              }

              public Point inViewPort() {
                Response response = execute(DriverCommand.GET_ELEMENT_LOCATION_ONCE_SCROLLED_INTO_VIEW,
        ImmutableMap.of("id", getId()));

    @SuppressWarnings("unchecked")
    Map<String, Number> mapped = (Map<String, Number>) response.getValue();

    return new Point(mapped.get("x").intValue(), mapped.get("y").intValue());
              }

              public Point onPage() {
                return image;
              }

              public Object getAuxiliary() {
                // extract the selenium imageElement id (imageElement.toString() and parse out the "{sdafbsdkjfh}" format id) and return it
              }
            };

        mouse.mouseMove(imageCoordinates);
于 2014-03-28T13:46:45.033 回答
0

使用 MoveToElement,您将能够找到或单击您想要的任何点,您只需定义第一个参数,它可以是实例 WindowsDriver 时创建的会话(winappdriver)或驱动程序(以其他方式)。否则,您可以将网格(我的情况)、列表、面板或任何您想要的设置为第一个参数。

注意:您的第一个参数元素的左上角将是位置 X = 0 和 Y = 0

   Actions actions = new Actions(this.session);
    int xPosition = this.session.FindElementsByAccessibilityId("GraphicView")[0].Size.Width - 530;
    int yPosition = this.session.FindElementsByAccessibilityId("GraphicView")[0].Size.Height- 150;
    actions.MoveToElement(this.xecuteClientSession.FindElementsByAccessibilityId("GraphicView")[0], xPosition, yPosition).ContextClick().Build().Perform();
于 2019-06-27T04:06:10.617 回答
0

如果您使用的是 RemoteWebDriver,则可以将 WebElement 转换为 RemoteWebElement。然后,您可以在该对象上调用 getCoordinates() 以获取坐标。

        WebElement el = driver.findElementById("elementId");
        Coordinates c = ((RemoteWebElement)el).getCoordinates();
        driver.getMouse().mouseMove(c);
于 2018-07-02T22:27:20.150 回答
0

得到它的工作

Actions builder = new Actions(driver);
WebElement el = some element;
builder.keyDown(Keys.CONTROL)
.moveByOffset( 10, 25 )
.clickAndHold(el)
.build().perform();
于 2019-04-22T15:38:50.647 回答
0

你可以做:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript("document.elementFromPoint(25,25)");

然后你会得到元素。您可以添加.click()以单击元素。

executeScript允许您获取文档元素并使用elementFromPoint内置的javascript函数通过X,Y Cord点击

于 2021-04-28T17:27:32.260 回答
-1
Robot robot = new Robot();
robot.mouseMove(coordinates.x,coordinates.y+80);

Rotbot 是一个很好的解决方案。这个对我有用。

于 2012-11-14T09:26:55.597 回答