Selenium WebDriver拖放到滚动条

时间:2014-06-13 06:20:25

标签: java selenium drag-and-drop selenium-webdriver scrollbar

我遇到了Selenium WebDriver拖放问题。它不想在滚动条中丢弃webelement。 我试过这个:

new Actions(SeleniumDriver.getDriver())).dragAndDrop(element, target).build().perform();

也尝试使用偏移量:

(new Actions(SeleniumDriver.getDriver()))
           .dragAndDropBy(element, xoffset, yoffset).build().perform();

并尝试使用:

Actions builder = new Actions(SeleniumDriver.getDriver());
builder.clickAndHold(element).build().perform();
builder.moveToElement(target).build().perform();
builder.release(target).build().perform();

任何人都知道滚动条的工作解决方案吗?感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

确保您尝试拖动正确的元素。 也许该元素不可拖动,它可能是一个可拖动的内部元素。

答案 1 :(得分:1)

我通过使用Java Robot类找到了解决方案。

  1. 将镶边切换为全屏:

    DesiredCapabilities dc = new DesiredCapabilities();
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--kiosk", "test-type");
    dc.setCapability(ChromeOptions.CAPABILITY, options);
    WebDriver driver = new ChromeDriver(dc);
    
  2. 获取起始和目标元素的坐标:

    // start coordinates
    int startX = new Integer(element.getLocation().x);
    int startY = new Integer(element.getLocation().y);
    
    // destination dimensions
    int startWidth = new Integer(element.getSize().width);
    int startHeight = new Integer(element.getSize().height);
    
    // destination coordinates
    int destinationX = new Integer(target.getLocation().x);
    int destinationY = new Integer(target.getLocation().y);
    
    // destination dimensions
    int destinationWidth = new Integer(target.getSize().width);
    int destinationHeight = new Integer(target.getSize().height);
    
    // work out destination coordinates
    int endX = Math.round(destinationX + (destinationWidth / 2));
    int endY = Math.round(destinationY + (destinationHeight / 2));
    int sX = Math.round(startX + (startWidth / 2));
    int sY = Math.round(startY + (startHeight / 2));
    
  3. 使用Java Robot类进行拖放:

    Thread.sleep(1000);
    Robot robot = new Robot();
    robot.mouseMove(sX, sY);
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseMove(endX, endY);
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    

答案 2 :(得分:0)

一些想法;

  • 点击并按住后需要小睡眠。我已经测试了需要100毫秒保持的应用程序,直到拖放我们初始化。

  • 它可能是使用HTML 5拖放,我最后尝试过的是Selenium不支持

  • user3723314

  • 建议的错误元素