【问题标题】:How to move visible mouse pointer using selenium web driver?如何使用 selenium Web 驱动程序移动可见的鼠标指针?
【发布时间】:2019-02-08 14:58:19
【问题描述】:

我是 Selenium 的新手。 我使用gridlastic 作为测试环境。

我已经完成了 selenium 的 Actions 类,它具有移动鼠标的方法,并通过调用 getMouse() 通过 Web 驱动程序获取鼠标实例,并尝试移动鼠标但成功。

@Test(enabled = true)
     public void test_site() throws Exception  {    
         Coordinates elementLocation = null;
        driver.get("https://www.amazon.com");

        Mouse mouse = ((HasInputDevices) driver).getMouse();
        System.out.println(mouse.toString());
        if(mouse==null) {
            System.out.println("mouse is null");    
        }
        WebElement element1=driver.findElementByXPath("//*[@id=\"a-autoid-0-announce\"]");
        elementLocation = ((Locatable) element1).getCoordinates();
        mouse.mouseMove(elementLocation);

        Thread.sleep(5000); //slow down for demo purposes


    }

也尝试使用动作类

@Test(enabled = true)
     public void test_site() throws Exception  {    
        driver.get("https://www.google.com/ncr");
        Actions builder = new Actions(driver);

        builder.
           moveByOffset( 100, 1 )
           .build().perform();
        Thread.sleep(10000); //slow down for demo purposes
        WebElement element = driver.findElement(By.name("q"));
        element.sendKeys("webdriver");
        element.submit();
        Thread.sleep(5000); //slow down for demo purposes
    }

仍然成功,鼠标指针始终保持在位置 (0,0)。任何人都可以帮助如何做到这一点。

请不要建议使用 JAVA 中的 Robot Class,因为测试环境是 gridlastic 并且不适合它。

我也尝试过使用 javascript 执行器,但由于鼠标光标是由操作系统控制的,所以这是不可能的。我想过改变窗口对象 clientX 和 clientY 的值,但根据文档,这些是只读的。

【问题讨论】:

    标签: selenium automated-tests selenium-grid


    【解决方案1】:

    这看起来很奇怪,但是如果你尝试下面的代码,你会发现,你没有看到移动的鼠标指针:

        PointerInput p = new PointerInput(PointerInput.Kind.MOUSE, "MyMouse");
        Interaction i = p.createPointerMove(Duration.ofSeconds(2), PointerInput.Origin.fromElement(element1), 5, 5);
        Actions builder = new Actions(driver);
        Action mouseOverHome = builder
                .tick(i).click()
                .build();
        mouseOverHome.perform();
    
    

    我添加了点击演示效果。我不得不在//*[@id=\"nav-cart\"] 使用购物车。你的 xpath 表达式对我来说是不可见的。在单击之前,您会注意到购物车图标的鼠标悬停效果。

    【讨论】:

    • 您使用的是哪个版本的硒?我问的原因是因为我无法从 selenium 导入 PointerInput ,其他导入能够导入。我正在使用硒 2.53.1
    • 我尝试使用 selenium 3.141.59 并且能够成功导入,但是在测试之后鼠标指针仍然在 (0,0),您可以在视频 s3-us-west-2.amazonaws.com/6ca5b6bd-816f-45ea-b0af-d33a1627f21e/… 上观看此视频
    • 我正在使用当前的 Selenium 3.141.59,但任何 Selenium 3 版本都应该适合。奇怪的效果是,可见的鼠标指针没有移动,而浏览器似乎有自己的虚拟鼠标指针。
    • 你能看一下视频吗,我确实尝试过你的代码建议,但是鼠标指针仍然在 (0,0)。我需要移动那个鼠标光标
    • 如果你真的需要移动可见的鼠标指针,我没有办法。我不希望用 webdriver 找到可行的解决方案。你可以看看youtube.com/watch?v=mpp0zCX0R34他的鼠标移动正常,但是可见的鼠标指针根本不动。
    【解决方案2】:

    您可以使用 AutoIT 控制鼠标点。您需要从 Selenium 运行时环境启动 AutoIT 脚本(看起来您正在使用 java) 这是调用 AutoIT 脚本的代码:

    //Some arbitrary example Selenium code...
    driver.findElement(By.id("input_4")).click();           
    // below line execute the AutoIT script .
    Runtime.getRuntime().exec("E:\\AutoIT\\FileUpload.exe");    

    感谢 Gaurav Nigam,我从 guru99.com 找到了这个例子。这是链接How to use AutoIT with Selenium Webdriver: File Upload Example

    在您的 AutoIT 脚本中,您需要一些“鼠标移动”命令:

    MouseMove(10, 100) ; Move the mouse cursor to the x, y position of 10, 100.

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多