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

Selenium WebDriver Java-鼠标移动到错误元素

丁均
2023-03-14
<div class="nav-template nav-flyout-content nav-tpl-itemList">                            
<span class="nav-hasPanel nav-item" data-nav-panelkey="InstantVideoPanel" role="navigation" aria-label="Amazon Video">                          
<span class="nav-text">Amazon Video</span>                          
</span>                                             
 <span class="nav-hasPanel nav-item" data-nav-panelkey="DigitalMusicPanel" role="navigation" aria-label="Amazon Music">                          
 <span class="nav-text">Amazon Music</span>                          
 </span>                                              
 <span class="nav-hasPanel nav-item" data-nav-panelkey="AndroidPanel" role="navigation" aria-label="Appstore for Android">                          
 <span class="nav-text">Appstore for Android</span>                          
 </span>                                              
@Test
public void departmentsDropMusic1() throws Exception {

    driver = new FirefoxDriver();

    driver.get("https://www.amazon.com");
    Thread.sleep(3000L);

    WebElement element = driver.findElement(By.xpath("//a[@id='nav-link-shopall']"));

    Actions action = new Actions(driver);

    action.moveToElement(element).build().perform();
    Thread.sleep(3000L);


    WebElement dropDown = driver.findElement(By.cssSelector("#nav-flyout-shopAll > div:nth-child(2)"));

    if (dropDown.isDisplayed()) {

        System.out.println("pass");
    } else {

        Assert.fail();
    }
    WebElement musicSubMenu = driver.findElement(By.xpath(//span[contains(text(), 'Amazon Music')]"));


    action.moveToElement(musicSubMenu).build().perform();
    Thread.sleep(3000L);

共有1个答案

龚振
2023-03-14

当我们移动到列表中的第一个元素时,它会移动到下拉列表中的第一个元素,因为所有子类别的元素都在加载。

为了克服这一点,我们需要在移动到列表中的任何其他元素之前移动到第一个元素。我创造了一种方法来解决你的问题。如果您传递子菜单名称,则它将在子菜单上移动。

代码如下所示。

@Test
public void departmentsDropMusic1() throws Exception {

    System.setProperty("webdriver.gecko.driver", "C:\\Projects\\SeleniumDrivers\\geckodriver.exe");

    driver = new FirefoxDriver();

    driver.get("https://www.amazon.com");
    Thread.sleep(5000L);

    openSubMenu("Amazon Music");

    openSubMenu("Fire TV");

}
public void openSubMenu(String menu) throws InterruptedException{


       //mouse over on Main menu 'Departments'
        WebElement element = driver.findElement(By.xpath("//a[@id='nav-link-shopall']"));

        Actions action = new Actions(driver);

        action.moveToElement(element).build().perform();
        Thread.sleep(5000L);

        //verify sub menus are listed or not
        WebElement dropDown = driver.findElement(By.cssSelector("#nav-flyout-shopAll"));

        if (dropDown.isDisplayed()) {
            System.out.println("pass");

        } else {

            Assert.fail();
        }

        //
        WebElement subMenu1 = driver.findElement(By.cssSelector("#nav-flyout-shopAll > div.nav-tpl-itemList>span:nth-child(1)"));
        WebElement subMenuWantedToOpen = driver.findElement(By.cssSelector("#nav-flyout-shopAll > div.nav-tpl-itemList>span[aria-label='"+menu.trim()+"']"));

        action.moveToElement(subMenu1).moveToElement(subMenuWantedToOpen).build().perform();

        Thread.sleep(5000L);

        WebElement subMenuCat = driver.findElement(By.cssSelector(".nav-subcats > div.nav-subcat[style='display: block;']"));

        if(subMenuCat.isDisplayed()){
            System.out.println(subMenuCat.getText());
        }

}
 类似资料:
  • 任务是将物理光标移动到元素。 尝试以下操作: 和以下内容:

  • ================================ 操作系统:Win7 硒:2.33.0 Firefox:22.0 Python:2.7.4 ================================ 我想用“move_to_element”方法将鼠标光标移动到元素“input”上,但不能这样做。 有人有这个问题吗? ==============================

  • 问题内容: 因此,正如标题所述,我想在鼠标拖动时移动椭圆。我先声明了椭圆并将其画出(因为我有8个椭圆,它们带有不同的颜色信息。四个是白色,另一个是红色)。我尝试做我对矩形所做的事情: 但这似乎不起作用。它给我一个错误 我有点困惑,因为我已经阅读了文档,并且Ellipse2D.Double存在这样的变量。 这是一个MCVE: 那么是否有替代算法,或者我只是在语法上缺少什么?我想知道解决方案。谢谢。

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

  • 我们将深入研究鼠标在元素之间移动时发生的事件。 事件 mouseover/mouseout,relatedTarget 当鼠标指针移到某个元素上时,mouseover 事件就会发生,而当鼠标离开该元素时,mouseout 事件就会发生。 这些事件很特别,因为它们具有 relatedTarget 属性。此属性是对 target 的补充。当鼠标从一个元素离开并去往另一个元素时,其中一个元素就变成了 t

  • 我使用Selenium和C#执行单击操作。 我可以执行点击操作,但我不能将鼠标指针(光标)移动到特定坐标或特定元素上。 这是我正在使用的代码。上下文单击正在工作,但光标未移动。 帮帮我。