Tried the following:

Actions builder = new Actions(driver); builder.keyDown(Keys.CONTROL) .click(someElement) .click(someOtherElement) .keyUp(Keys.CONTROL); Action selectMultiple = builder.build(); selectMultiple.perform(); 

and

 Actions builder = new Actions(driver); Action dragAndDrop = builder.clickAndHold(someElement) .moveToElement(otherElement) .release(otherElement) .build(); dragAndDrop.perform(); 

and

 WebElement element = driver.findElement(By.name("source")); WebElement target = driver.findElement(By.name("target")); (new Actions(driver)).dragAndDrop(element, target).perform(); 

I also tried to move the mouse along the axes by (1, 1). None of this helped. ChromeDriver generally support this action? If so, can there be options how can this be implemented?

  • @SeniorPomidor, drag one item into the frame of another. As it is written in the question, as well as it is clear from the given code examples - Pavel Bobrov
  • Here I work on the last chrome. and you? - Senior Pomidor
  • I tried all 3 ways given in the question. Nothing. I downloaded the new driver - the effect is zero. The version of chromium is also the last. The test passes, does not fall. Odnko elements remain in place - Pavel Bobrov
  • Driver version 2.36. With later tests do not run. maybe this is the case? - Pavel Bobrov
  • @SeniorPomidor can be more detailed about the environment? Chrome version, driver version. Maybe an example of running the code? - Pavel Bobrov

1 answer 1

perhaps some problems with the browser or driver ...

Let's try to solve this problem through JavaScript

 function createEvent(typeOfEvent) { var event = document.createEvent("CustomEvent"); event.initCustomEvent(typeOfEvent, true, true, null); event.dataTransfer = { data: {}, setData: function (key, value) { this.data[key] = value; }, getData: function (key) { return this.data[key]; } }; return event; } function dispatchEvent(element, event, transferData) { if (transferData !== undefined) { event.dataTransfer = transferData; } if (element.dispatchEvent) { element.dispatchEvent(event); } else if (element.fireEvent) { element.fireEvent("on" + event.type, event); } } function simulateHTML5DragAndDrop(element, target) { var dragStartEvent = createEvent('dragstart'); dispatchEvent(element, dragStartEvent); var dropEvent = createEvent('drop'); dispatchEvent(target, dropEvent, dragStartEvent.dataTransfer); var dragEndEvent = createEvent('dragend'); dispatchEvent(element, dragEndEvent, dropEvent.dataTransfer); } 

Next you need to call the simulateHTML5DragAndDrop method.

 ((JavascriptExecutor) driver).executeScript(scriptOnTop + "simulateHTML5DragAndDrop(arguments[0], arguments[1])", source, target);