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.

  • ๐ŸŽ“ Use a classe Actions para criar gestos de teclado e mouse e, em seguida, chame build() e perform() para executรก-los na pรกgina.
  • ๐ŸŒŸ Escolha arrastar e soltar (origem, destino) quando tiver ambos os elementos e arrastar e soltar por (origem, deslocamento x, deslocamento y) quando precisar de precisรฃo em nรญvel de pixel.
  • ๐Ÿš€ Sempre espere que os elementos de origem e destino estejam presentes antes de invocar a operaรงรฃo de arrastar para evitar testes instรกveis.
  • ๐ŸŽ–๏ธ Verifique visualmente a aรงรฃo ou confirmando as alteraรงรตes de atributos no alvo para que o teste confirme a interaรงรฃo real e nรฃo apenas uma aรงรฃo enfileirada.
  • ๐Ÿ† Localizadores com auxรญlio de IA corrigem XPaths corrompidos apรณs atualizaรงรตes da interface do usuรกrio, reduzindo a manutenรงรฃo de conjuntos de testes de arrastar e soltar executados em pipelines de CI.

Arraste e solte em Selenium

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.

Arraste e solte em Selenium

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.

Configuraรงรฃo do Cenรกrio 1: Arrastar e Soltar

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.

Eclipse Executando o script de arrastar e soltar

O resultado visual na pรกgina de demonstraรงรฃo รฉ semelhante a este:

Animaรงรฃo de saรญda por arrastar e soltar

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.

Identificando deslocamentos de pixel para arrastar e soltar

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 WebDriverWait com as ExpectedConditions.elementToBeClickable antes 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.scrollToElement JavaO 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.

Perguntas Frequentes

Arraste e solte em Selenium ร‰ um gesto automatizado do mouse que seleciona um elemento de origem e o solta em um destino. Ele รฉ executado por meio da classe Actions usando dragAndDrop ou dragAndDropBy.

O mรฉtodo `dragAndDrop` aceita os elementos da Web de origem e destino. Jรก o mรฉtodo `dragAndDropBy` recebe a origem mais os deslocamentos em pixels nos eixos x e y, proporcionando controle preciso quando o destino nรฃo รฉ um elemento discreto.

A funรงรฃo `build()` compila as interaรงรตes encadeadas em uma รบnica aรงรฃo composta, e a funรงรฃo `perform()` a executa. Sem a funรงรฃo `perform()`, as etapas enfileiradas nunca sรฃo executadas no navegador.

Muitos sites HTML5 usam eventos de arrastar e soltar nativos que a API Actions nem sempre aciona. Nesses casos, dispare os eventos dragstart, dragover e drop por meio do executeScript como um mecanismo de disparo. JavaScript de fallback.

Abra as Ferramentas de Desenvolvedor do navegador, passe o cursor sobre o destino e leia os valores de getBoundingClientRect do elemento. SubtracA posiรงรฃo de origem รฉ determinada a partir da posiรงรฃo de destino para obter os deslocamentos x e y em pixels.

Sim. Envolva as pesquisas de origem e destino em um WebDriverWait com ExpectedConditions.elementToBeClickable para que o arrastar sรณ seja executado depois que ambos os elementos estiverem interativos, reduzindo a instabilidade nas execuรงรตes de CI.

As ferramentas de IA fornecem localizadores com capacidade de autorreparaรงรฃo que se adaptam ร s mudanรงas nos XPaths e recomendam seletores estรกveis โ€‹โ€‹para elementos de origem e destino. Isso reduz a necessidade de manutenรงรฃo para conjuntos de ferramentas de arrastar e soltar que funcionam em diferentes versรตes.

Sim. Os assistentes de programaรงรฃo com IA transformam um cenรกrio em linguagem simples, como "arraste BANCO para o lado do dรฉbito e verifique o total", em uma cadeia completa de aรงรตes com arrastar e soltar, construir, executar e uma etapa de verificaรงรฃo.

Resuma esta postagem com: