代码之家  ›  专栏  ›  技术社区  ›  Čamo

Selenium moveToElement不会触发鼠标悬停事件

  •  0
  • Čamo  · 技术社区  · 3 年前

    问题与测试有关 sortable list 插件。我需要将光标移动到元素A,然后单击并按住(拖动)此元素并移动到另一个元素B。然后等待一秒钟,然后释放拖动的元素A。第二个元素B应该为拖动的元素A.打开一个新的占位符。

    问题是元素B应该知道光标在它上面,并且应该打开占位符。但它没有反应。元素B监听鼠标移动事件,但我不确定是否 moveToElement() 根本不会触发此事件。我有一段代码可以正常工作,但无法打开占位符。

    public void dragSubcategoryOutOfParentCategory(String parentCategoryText, String subCategoryText)
    {
        Actions actions = new Actions(WebDriverRunner.getWebDriver());
    
        SelenideElement parentCategory = $$("#main .sortable li").get(0);
        SelenideElement subCategory = parentCategory.find("ul li");
    
        HashMap<String, Integer> parentTopLeftOffset = getElementTopLeftOffset(parentCategory);
        HashMap<String, Integer> subCategoryTopLeftOffset = getElementTopLeftOffset(subCategory);
    
        // Move cursor to top left corner
        actions.moveToElement(subCategory, subCategoryTopLeftOffset.get("x"), subCategoryTopLeftOffset.get("y")).perform();
    
        actions.clickAndHold().perform();
    
        // Move cursor to top left corner + 3px
        actions.moveToElement(parentCategory, parentTopLeftOffset.get("x") + 3, parentTopLeftOffset.get("y") + 3).perform();
    
        sleep(5000);
    
        actions.release().build().perform();
    
    }
    

    这是我想要的截图

    enter image description here

    这是我的截图

    enter image description here

    0 回复  |  直到 3 年前
        1
  •  0
  •   Čamo    3 年前

    当我写这个问题时,我试图在元素B上逐步模拟mousemove事件,它奏效了。所以代码现在看起来像:

    public void dragSubcategoryOutOfParentCategory(String parentCategoryText, String childCategoryText)
    {
        Actions actions = new Actions(WebDriverRunner.getWebDriver());
    
        SelenideElement parentCategory = $$("#main .sortable li").get(0);
        SelenideElement childCategory = parentCategory.find("ul li");
    
        HashMap<String, Integer> parentTopLeftOffset = getElementTopLeftOffset(parentCategory);
        HashMap<String, Integer> childTopLeftOffset = getElementTopLeftOffset(childCategory);
    
    
        actions.moveToElement(childCategory, childTopLeftOffset.get("x"), childTopLeftOffset.get("y")).perform();
        actions.clickAndHold().perform();
        actions.moveToElement(parentCategory, parentTopLeftOffset.get("x") + 4, parentTopLeftOffset.get("y") + 4).perform();
        // Needs to simulate mousemove over the parent element,
        // otherwise it does not open new hint holder.
        sleep(250);
        actions.moveToElement(parentCategory, parentTopLeftOffset.get("x") + 3, parentTopLeftOffset.get("y") + 3).perform();
        sleep(250);
        actions.moveToElement(parentCategory, parentTopLeftOffset.get("x") + 2, parentTopLeftOffset.get("y") + 2).perform();
        sleep(1000);
        actions.release().build().perform();
    
        sleep(5000);
    }