微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

moveToElement 不会触发鼠标悬停事件

如何解决moveToElement 不会触发鼠标悬停事件

问题与测试此 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

解决方法

当我写这个问题时,我试图通过元素 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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。