当前位置: 首页 > 知识库问答 >
问题:

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

牧宁
2023-03-14

我对硒还不熟悉。我使用Gridrastic作为测试环境。

我已经学习了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


    }

还尝试了使用actions类

@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)。有人能帮忙吗?

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

共有2个答案

袁志专
2023-03-14

你可以用AutoIT控制鼠标点。您需要从Selenium运行时环境(看起来您正在使用java)启动AutoIT脚本。以下是调用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");    
东郭翰音
2023-03-14

这似乎很奇怪,但如果您尝试以下代码,您将看到,您没有看到移动的鼠标指针:

    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-car\"]使用购物车。您的xpath表达式对我来说不可见。您会注意到点击之前购物车图标的鼠标悬停效果。

 类似资料:
  • 问题内容: 我试图单击此页面上的元素: 在这一点上,我想单击“现金流量”,“资产负债表”或“季度”。我知道这些按钮已加载,因为我可以使用BeautifulSoup从页面源中提取它们。但是,当我尝试使用Selenium时: 全部返回“无法定位元素”,除了“季度”返回一个元素,但它位于图上方的一个元素而不是我感兴趣的表格上方的一个元素。 我认为这是由于位于错误的iframe中,而我找到了所有ifram

  • 使用mongo c#驱动程序的连池和等待队列出现问题。 有没有办法从MongoClient获取指标?活动连接的数量、连接池的大小、等待队列的大小等。

  • 我是硒的新手,我面临着简单任务的问题。 我试图将鼠标移动到页面中的特定区域(x,y坐标),然后单击,但没有成功。我确实阅读了文档,因为chromewebdriver,我使用了。 这是我的代码: 另一个问题。我知道有第四个参数起源,但是,我不知道我是否正确导入了它。 我也不知道如何触发点击事件,因为我没有选择任何元素。我想点击鼠标指针的最后位置。

  • 我正在开发nodejs,我添加了selenium模块。现在我被困在点击按钮上。我必须通过将鼠标指针移动到元素位置来点击。并且需要点击它。所以有人告诉我如何使用ActionSequence在特定的x y坐标上移动鼠标并用selenium上下点击鼠标。 我已经搜索过了,但只得到了与Java相关的解决方案。

  • 我试图执行一个测试在移动设备但我有下一个错误 Chrome版本:83.04103.101 我正在寻找解决方案,但什么也没找到。

  • 问题内容: 我从LDD3第14章读到了有关热插拔驱动程序的信息。我需要编写一个USB鼠标驱动程序,在插入硬件时会加载该驱动程序。现在,通过做一些实验,我知道有一个名为“ hid-generic”的驱动程序,在插拔时会被调用。 另外,lsmod显示 我的疑问如下 1)为了在插入此鼠标时加载模块(hotplug),我必须在内核中禁用这3个驱动程序,并使用id_table中具有供应商和设备ID的驱动程序