Como arrastar e soltar Selenium (Exemplo)
โก Resumo Inteligente
Arraste e solte em Selenium O WebDriver permite a simulaรงรฃo automatizada de interaรงรตes baseadas no mouse, que movem um elemento de origem e o soltam em um destino definido. A classe Actions viabiliza esses gestos por meio dos mรฉtodos dragAndDrop e dragAndDropBy, para uma automaรงรฃo precisa e repetรญvel do navegador.

O que รฉ arrastar e soltar em Selenium?
Arraste e solte em Selenium ร uma interaรงรฃo automatizada que simula clicar e segurar um elemento de origem, movรช-lo pela pรกgina e soltรก-lo em um local de destino. ร amplamente utilizada para testar aplicaรงรตes web modernas que dependem de interfaces de arrastar e soltar, como carregadores de arquivos, quadros Kanban e lojas virtuais.ping carrinhos e construtores de painรฉis.
In Selenium WebDriver, o recurso de arrastar e soltar รฉ realizado atravรฉs do Aรงรฃo classe, que fornece mรฉtodos especializados para encadear gestos do mouse e executรก-los como uma รบnica aรงรฃo composta.
A classe Actions expรตe dois mรฉtodos principais para automaรงรฃo de arrastar e soltar:
Sintaxe:
Actions act = new Actions(driver);
//for drag and drop directly on an element
act.dragAndDrop(Source, Destination).build().perform();
//for drag and drop with pixel offsets
act.dragAndDropBy(WebElement Source, int xOffset, int yOffset).build().perform();
Aqui, dragAndDrop() recebe os WebElements de origem e destino, enquanto dragAndDropBy() Recebe o elemento de origem e os deslocamentos em pixels x/y para movรช-lo.
Como arrastar e soltar Selenium
Os trรชs cenรกrios a seguir demonstram a automaรงรฃo prรกtica de arrastar e soltar no Guru99 pรกgina de demonstraรงรฃo https://demo.guru99.com/test/drag_drop.htmlO objetivo รฉ mover o BANCO elemento de dรฉbito no de Corretora รกrea do lado do dรฉbito para que o valor de $5000 seja contabilizado corretamente como uma transaรงรฃo a dรฉbito.
Cenรกrio 1: Arrastar e soltar usando o mรฉtodo dragAndDrop
Neste cenรกrio, o elemento de origem (BANCO) รฉ arrastado para o destino (lado do dรฉbito da conta) usando o dragAndDrop(source, target) mรฉtodo que aceita diretamente os WebElements de origem e destino.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
public class DragAndDropExample {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/drag_drop.html");
// Locate the source (BANK) element
WebElement Source = driver.findElement(By.xpath("//*[@id='credit2']/a"));
// Locate the target (Account debit side) element
WebElement Dest = driver.findElement(By.xpath("//*[@id='bank']/li"));
// Create the Actions instance
Actions act = new Actions(driver);
// Perform drag and drop
act.dragAndDrop(Source, Dest).build().perform();
}
}
Apรณs a execuรงรฃo do script, o BANCO A telha se move para o de Corretora na รกrea de dรฉbito e o valor de $5000 รฉ registrado como um dรฉbito.
O resultado visual na pรกgina de demonstraรงรฃo รฉ semelhante a este:
Cenรกrio 2: Arrastar e soltar usando o mรฉtodo dragAndDropBy
O dragAndDropBy(source, xOffset, yOffset) O mรฉtodo oferece precisรฃo em nรญvel de pixel. Em vez de soltarping Ao aplicar a funรงรฃo a um elemento alvo, ela move a fonte por um nรบmero especรญfico de pixels ao longo dos eixos X e Y.
Para determinar o deslocamento, passe o cursor sobre a รกrea de destino no seu navegador e leia as coordenadas em pixels com uma ferramenta como a rรฉgua do inspetor ou uma extensรฃo de coordenadas de tela.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
public class DragAndDropByExample {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/drag_drop.html");
// Locate the source (BANK) element
WebElement Source = driver.findElement(By.xpath("//*[@id='credit2']/a"));
// Create the Actions instance
Actions act = new Actions(driver);
// Drag the source by 400 pixels right and 0 pixels down
act.dragAndDropBy(Source, 400, 0).build().perform();
}
}
O script move o bloco BANK pelo deslocamento fornecido e o coloca no lado do dรฉbito da conta, produzindo o mesmo resultado financeiro do Cenรกrio 1.
Cenรกrio 3: Arrastar, soltar e verificar vรกrios elementos
Este cenรกrio encadeia vรกrias operaรงรตes de arrastar e soltar e verifica o resultado, comparando o valor final com o valor de destino. Vรกrios elementos de origem (BANCO, VENDAS, 5000, 500) sรฃo movidos para suas respectivas zonas de dรฉbito e crรฉdito, e o script confirma se os totais correspondem ao saldo esperado.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
public class DragAndDropMultiple {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://demo.guru99.com/test/drag_drop.html");
// Locate sources
WebElement srcBank = driver.findElement(By.xpath("//*[@id='credit2']/a"));
WebElement srcSales = driver.findElement(By.xpath("//*[@id='credit1']/a"));
WebElement src5000 = driver.findElement(By.xpath("//*[@id='fourth']/a"));
WebElement src500 = driver.findElement(By.xpath("//*[@id='fourth']/a"));
// Locate targets
WebElement debitSide = driver.findElement(By.xpath("//*[@id='bank']/li"));
WebElement creditSide = driver.findElement(By.xpath("//*[@id='loan']/li"));
WebElement amount7 = driver.findElement(By.xpath("//*[@id='amt7']/li"));
WebElement amount8 = driver.findElement(By.xpath("//*[@id='amt8']/li"));
Actions act = new Actions(driver);
act.dragAndDrop(srcBank, debitSide).build().perform();
act.dragAndDrop(srcSales, creditSide).build().perform();
act.dragAndDrop(src5000, amount7).build().perform();
act.dragAndDrop(src500, amount8).build().perform();
// Verify the displayed total
String total = driver.findElement(By.xpath("//*[@id='totamt']")).getText();
if (total.equals("5500")) {
System.out.println("Test Passed: total matches expected 5500");
} else {
System.out.println("Test Failed: actual total " + total);
}
}
}
Este padrรฃo demonstra como o recurso de arrastar e soltar pode ser combinado com asserรงรตes para validar o comportamento funcional, e nรฃo apenas o movimento visual.
Melhores prรกticas para automaรงรฃo de arrastar e soltar
Os testes de arrastar e soltar estรฃo entre os scripts mais instรกveis โโem um Selenium sรฃo essenciais porque dependem de coordenadas precisas do mouse e da disponibilidade do DOM. As seguintes prรกticas garantem sua confiabilidade:
- Aguarde os elementos: Uso
WebDriverWaitcom asExpectedConditions.elementToBeClickableantes de iniciar o arrastar. - Prefiro arrastar e soltar em vez de... JavaTruques de script: Os eventos de arrastar nativos do HTML5 ร s vezes precisam de um JavaUtilize um script como alternativa, mas priorize a API de Aรงรตes.
- Deslize o cursor para visualizar o alvo: Um destino fora da tela causa falhas silenciosas. Use
Actions.scrollToElementJavaO script rola antes de arrastar. - Verifique o resultado: Sempre verifique se hรก uma mudanรงa de estado mensurรกvel (texto, atributo, contagem) apรณs a soltura, em vez de simplesmente confiar que a aรงรฃo foi executada.
- Executar em resoluรงรฃo estรกvel: A funรงรฃo de arrastar com deslocamento de pixel falha se o tamanho da janela de visualizaรงรฃo for diferente daquele usado para calcular os deslocamentos.





