【问题标题】:Selenium Automation drag and drop functionality issueSelenium 自动化拖放功能问题
【发布时间】:2015-04-09 22:30:18
【问题描述】:

我正在尝试拖放一个元素,但无法在所需位置释放该元素。

问题是:我想将元素放在仅在运行时可见的占位符中(即:当我单击并按住元素并移动到目标元素时) 移动到目标元素后,占位符在我应该释放元素的位置被激活。

这是我的代码:(在 FirefoxDriver 初始化之后)

    String  sourceelement ="#ctl00_ctl44_g_0beb5998_7319_49ac_9956_28684e341659_dvCart img";
    String destinationelement = "#dvZone_LeftColumn";
    Actions builder = new Actions(driver);
    builder.clickAndHold(driver.findElement(By.cssSelector(sourceelement)));
    builder.moveToElement(driver.findElement(By.cssSelector(destinationelement)));
    builder.perform();
    Thread.sleep(250);

    WebElement holder = driver.findElement(By.className("placeholder"));
    builder.release(holder).perform();

这里是 HTML 源码 sn-p(释放元素部分):

“”在任何“”下被激活,具体取决于我在拖动后将该元素放在哪里。

问题:

1 - 在执行脚本时,如果我移动鼠标而不是元素被释放到占位符中,那么成功执行(但必须在那时移动鼠标以释放占位符中的元素,这不应该在自动化中完成)

2 - 如果我不移动鼠标,脚本会失败并显示“找不到带有 classname=placeholder 的元素”

请帮忙

提前致谢

【问题讨论】:

  • HTML sn-p :

标签: selenium-webdriver drag-and-drop automation


【解决方案1】:

您的target 占位符似乎只有在按住source 并移动鼠标时才会激活。

我建议您首先单击并按住 source 元素并将其移动一定的偏移量,这将使您的目标占位符可见。通过这种方式,您可以确保不会收到 “Cannot find element with classname=placeholder” 错误。

        String  sourceelement ="#ctl00_ctl44_g_0beb5998_7319_49ac_9956_28684e341659_dvCart img";
        String destinationelement = "#dvZone_LeftColumn";
        Actions builder = new Actions(_driver);
        builder.clickAndHold(_driver.findElement(By.cssSelector(sourceelement)));

        builder.moveByOffset(1, 1).perform();// this will move the mouse by 1,1 which will be holding your source element

        builder.moveToElement(_driver.findElement(By.cssSelector(destinationelement)));
        builder.perform();
        Thread.sleep(250);


        WebElement holder = _driver.findElement(By.className("placeholder"));
        builder.release(holder).perform();

【讨论】:

  • 是的,我的问题是对的......我尝试了上面的代码行通过偏移量移动鼠标,但它给了我错误:元素内的偏移量无法滚动到视图中:(135 , 30) 这个问题有什么解决办法吗?
  • 尝试给出一些其他的偏移值。
  • 终于成功了!!我使用 Robot 类循环移动鼠标,以便在脚本执行期间激活目标元素。 (使用 Thread.sleep() 在所需部分查看鼠标移动)
猜你喜欢
  • 2023-03-03
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2020-05-14
相关资源
最近更新 更多