如何使用Selenium Web驱动程序移动可见的鼠标指针?

时间:2019-02-08 14:58:19

标签: selenium automated-tests selenium-grid gridlastic

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

我经历了硒类的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)。任何人都可以帮忙。

enter image description here 请不要建议使用JAVA中的Robot Class,因为测试环境是网格弹性的,并且不适用于该环境。

我也尝试使用javascript执行程序,但由于鼠标光标受操作系统控制,因此无法执行。我考虑过更改窗口对象clientX和clientY的值,但是根据文档,它们是只读的。

2 个答案:

答案 0 :(得分: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表达式对我不可见。单击之前,您会注意到购物车图标的鼠标悬停效果。

答案 1 :(得分:0)

您可以使用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.