Como automatizar a funcionalidade de arrastar e soltar usando o Selenium WebDriver Java

Como automatizar a funcionalidade de arrastar e soltar usando o Selenium WebDriver em java?

Há uma página que documenta as interações avançadas do usuário; que tem muitos ótimos exemplos sobre como gerar uma sequência de ações, você pode encontrá-la aqui

 // Configure the action Actions builder = new Actions(driver); builder.keyDown(Keys.CONTROL) .click(someElement) .click(someOtherElement) .keyUp(Keys.CONTROL); // Then get the action: Action selectMultiple = builder.build(); // And execute it: selectMultiple.perform(); 

ou

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

O selenium tem boa documentação. Aqui está um link para a parte específica da API que você está procurando.

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

O selenium tem tantas opções para executar arrastar e soltar.

Na class Action, temos alguns methods que executam a mesma tarefa.

Eu listei a solução possível por favor dê uma olhada.

http://learn-automation.com/drag-and-drop-in-selenium-webdriver-using-actions-class/

Arrastar e soltar pode ser implementado assim …

 public ObjectPage filter(int lowerThreshold, int highThreshold) { Actions action = new Actions(getWebDriver()); action.dragAndDropBy(findElement(".className .thumbMin"), lowerThreshold, 0).perform(); waitFor(elementIsNotDisplayed("#waiting_dialog")); action.dragAndDropBy(findElement(".className .thumbMax"), highThreshold, 0).perform(); waitFor(elementIsNotDisplayed("#waiting_dialog")); return this; } 

Espero que ajude!

Tente este:

  Actions builder = new Actions(fDriver); builder.keyDown(Keys.CONTROL) .click(element) .dragAndDrop(element, elementDropped) .keyUp(Keys.CONTROL); Action selected = builder.build(); selected.perform(); 
  WebElement fromElement= driver.findElement(By.xpath("SourceElement")); WebElement toElement=driver.findElement(By.xpath("TragetElement")); Actions action = new Actions(WebDriver); Action dragDrop = action.dragAndDrop(fromElement, toElement).build(); dragDrop.perform(); 

Eu faria assim em Perl usando Selenium :: Remote :: Driver.

 my $sel = <>; #selenium handle my $from_loc = ; my $to_loc = ; my $from_element = $sel->find_element($from_loc); my $to_element = $sel->find_element($to_loc); # Move mouse to from element, drag and drop $sel->mouse_move_to_location(element=>$from_element); $sel->button_down(); # Holds the mouse button on the element $sel->mouse_move_to_location(element=>$to); # Move mouse to the destination $sel->button_up(); 

Isso deve servir!

mais uma maneira é usar draganddrop() assim

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

Tente implementar o código abaixo

 package com.kagrana; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Action; import org.openqa.selenium.interactions.Actions; public class DragAndDrop { @Test public void test() throws InterruptedException{ WebDriver driver = new FirefoxDriver(); driver.get("http://dhtmlx.com/docs/products/dhtmlxTree/"); Thread.sleep(5000); driver.findElement(By.cssSelector("#treebox1 > div > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(3) > td:nth-child(2) > table > tbody > tr > td.standartTreeRow > span")).click(); WebElement elementToMove = driver.findElement(By.cssSelector("#treebox1 > div > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(3) > td:nth-child(2) > table > tbody > tr > td.standartTreeRow > span")); WebElement moveToElement = driver.findElement(By.cssSelector("#treebox1 > div > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(1) > td.standartTreeRow > span")); Actions dragAndDrop = new Actions(driver); Action action = dragAndDrop.dragAndDrop(elementToMove, moveToElement).build(); action.perform(); } } 

Para o xpath você pode usar os comandos acima como este:

 WebElement element = driver.findElement(By.xpath("enter xpath of source element here")); WebElement target = driver.findElement(By.xpath("enter xpath of target here")); (new Actions(driver)).dragAndDrop(element, target).perform(); 
 import com.thoughtworks.selenium.Selenium; import org.openqa.selenium.firefox.FirefoxProfile; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.WebDriver; import org.openqa.selenium.By; //------------------------------------------------------------------------- import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.interactions.Action; /* Move only @param o WebElement to move @param d WebElement destination element */ m.drag={o,d-> def lo=o.location; def ld=d.location; int di=ld.y - lo.y; int inc,lim if (di<0) { inc=-1 lim=ld.y+d.size.height } else { inc=1 lim=ld.y } def fes={ int act=o.location.y; println "act=${act} ${lim}"; if (inc > 0) return !(act>lim) else return !(act 

O selenium tem boa documentação. Aqui está um link para a parte específica da API que você está procurando:

WebElement element = driver.findElement(By.name("source"));

WebElement target = driver.findElement(By.name("target"));

(new Actions(driver)).dragAndDrop(element, target).perform();

Isso é para arrastar e soltar um único arquivo, como arrastar e soltar vários arquivos.

Eu usei abaixo parte do código. Aqui dragAndDrop (x, y) é um método da class Action. Que leva dois parâmetros (x, y), local de origem e local de destino, respectivamente

 try { System.out.println("Drag and Drom started :"); Thread.sleep(12000); Actions actions = new Actions(webdriver); WebElement srcElement = webdriver.findElement(By.xpath("source Xpath")); WebElement targetElement = webdriver.findElement(By.xpath("Target Xpath")); actions.dragAndDrop(srcElement, targetElement); actions.build().perform(); System.out.println("Drag and Drom complated :"); } catch (Exception e) { System.out.println(e.getMessage()); resultDetails.setFlag(true); }