moveToElement 不会触发鼠标悬停事件

时间:2021-03-16 20:39:01

标签: java selenium mouse mouseover

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

1 个答案:

答案 0 :(得分:0)

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