Como fazer upload e download de um arquivo usando Selenium
โก Resumo Inteligente
Faรงa upload e download de arquivos usando Selenium Os fluxos de trabalho do WebDriver dependem do mรฉtodo nativo sendKeys() para campos de entrada, do AutoIt ou Robot para diรกlogos e de comandos CDP em Selenium 4. Para definir caminhos de download seguros durante a execuรงรฃo de automaรงรฃo.

O envio de arquivos no WebDriver รฉ feito simplesmente usando o mรฉtodo `sendKeys()` no campo de entrada de seleรงรฃo de arquivo para inserir o caminho do arquivo a ser enviado. Neste tutorial, vocรช aprenderรก como lidar com envios e downloads de arquivos usando o WebDriver. Selenium WebDriver.
Como fazer upload de arquivo em Selenium
Para esta seรงรฃo, usaremos https://demo.guru99.com/test/upload/ como nosso aplicativo de teste. Este site permite facilmente que qualquer visitante carregue arquivos sem exigir que ele se inscreva.

Digamos que desejamos fazer upload do arquivo โC:\newhtml.htmlโ. Nosso cรณdigo WebDriver deve ser como o mostrado abaixo.
importar org.openqa.selenium.*;
importar org.openqa.selenium.firefox.FirefoxMotoristas;
aula pรบblica PG9 {
vazio estรกtico pรบblico a Principal(Tanga[] args) {
Sistema.setPropriedade(โwebdriver.gecko.driverโ,โC:\\geckodriver.exeโ);
Tanga baseUrl = โhttps://demo.guru99.com/test/upload/โ;
webdriver motorista = new FirefoxMotorista();
driver.get(baseUrl);
Elemento Web uploadElement = driver.findElement(By.id(โuploadfile_0โ));
// Insira o caminho do arquivo no campo de entrada de seleรงรฃo de arquivo
uploadElement.sendKeys(โC:\\newhtml.htmlโ);
// Marque a caixa de seleรงรฃo โAceito os termos de serviรงoโ
driver.findElement(By.id(โtermosโ)).clique();
// Clique no botรฃo โCarregar arquivoโ
driver.findElement(By.name("mandar")).clique();
}
}
Depois de executar este script, vocรช poderรก fazer upload do arquivo com sucesso e deverรก receber uma mensagem semelhante a esta.
Lembre-se dos dois pontos a seguir ao fazer upload de arquivos no WebDriver:
- Nรฃo รฉ necessรกrio simular o clique no botรฃo โProcurarโ. O WebDriver insere automaticamente o caminho do arquivo na caixa de texto de seleรงรฃo de arquivos do elemento.
- Ao definir o caminho do arquivo em seu Java IDE, use o caractere de escape adequado para a barra invertida.
Lidando com diรกlogos de upload sem entrada de dados usando AutoIt
Quando a pรกgina usa um botรฃo Procurar personalizado em vez de um botรฃo nativo. O mรฉtodo `sendKeys()` nรฃo funciona. Nesse caso, vocรช pode chamar um script AutoIt a partir do elemento. Selenium Digite o caminho do arquivo na caixa de diรกlogo do sistema operacional e pressione Enter.
Salve o script abaixo como upload.au3, compile-o para upload.exe, entรฃo invoque-o a partir de Java apรณs clicar no botรฃo Procurar.
WinWaitActive("Aberto")
Enviar(โC:\newhtml.htmlโ)
Enviar("{DIGITAR}")
Desde Java, acione o auxiliar apรณs o clique em Procurar:
Runtime.getRuntime().exec(โC:\\AutoIt\\upload.exeโ);
A classe java.awt.Robot รฉ uma classe pura-Java alternativa quando o AutoIt nรฃo estiver disponรญvel, embora o AutoIt seja mais confiรกvel em Windows Porque aguarda o diรกlogo pelo tรญtulo.
Como baixar um arquivo em Selenium Driver da Web
O WebDriver nรฃo tem capacidade de acessar as caixas de diรกlogo de download apresentado pelos navegadores quando vocรช clica em um link ou botรฃo de download. No entanto, podemos ignorar essas caixas de diรกlogo usando um programa separado chamado โwgetโ.
O que รฉ Wget?
Wget รฉ um programa de linha de comando pequeno e fรกcil de usar usado para automatizar downloads. Basicamente, acessaremos o Wget a partir do nosso script WebDriver para realizar o processo de download.
Configurando o Wget
Passo 1) Na sua unidade C, crie uma nova pasta e nomeie-a como โWgetโ.
Baixar wget.exe daqui e coloque-o na pasta Wget que vocรช criou na etapa anterior.
Passo 2) Abra o Run pressionando Windows Tecla + โRโ; digite โcmdโ e clique em OK.
Digite o comando โcd /โ para acessar o diretรณrio raiz.
Passo 3) Digite o comando para verificar se a configuraรงรฃo fornecida estรก funcionando.
Parece haver um problema ao gravar na unidade C.
Passo 4) Vocรช precisa depurar os erros do wget na linha de comando antes de executar o cรณdigo usando Selenium WebDriver. Esses erros persistirรฃo em Eclipse e as mensagens de erro nรฃo serรฃo tรฃo informativas. ร melhor primeiro fazer o wget funcionar usando a linha de comando. Se funcionar na linha de comando, certamente funcionarรก no servidor. Eclipse.
Em nosso exemplo, conforme mostrado na Etapa 3, hรก um problema ao gravar na unidade C. Vamos alterar o local de download para a unidade D e verificar os resultados.
Messenger foi baixado com sucesso.
Antes de prosseguir, nรฃo se esqueรงa de excluir o arquivo baixado.
Usando WebDriver e Wget
No exemplo a seguir, usaremos o WebDriver e o wget para baixar um software de bate-papo popular chamado Yahoo MessengerNossa base URL serรก https://demo.guru99.com/test/yahoo.html.
Passo 1) Importe o pacote โjava.io.IOExceptionโ porque teremos que capturar uma IOException posteriormente na Etapa 4.
Passo 2) Use a funรงรฃo getAttribute() para obter o valor "href" do link de download e salve-o como uma variรกvel do tipo String. Neste caso, nomeamos a variรกvel como "sourceLocation".
Passo 3) Configure a sintaxe para o wget usando o seguinte comando.
Passo 4) Inicie o processo de download chamando wget do nosso cรณdigo WebDriver.
Resumindo, o cรณdigo do WebDriver pode ser semelhante ao mostrado abaixo.
importar java.io.IOException;
importar org.openqa.selenium.*;
importar org.openqa.selenium.firefox.FirefoxMotoristas;
aula pรบblica PG8 {
vazio estรกtico pรบblico a Principal(Tanga[] args) {
Sistema.setPropriedade(โwebdriver.gecko.driverโ,โC:\\geckodriver.exeโ);
Tanga baseUrl = โhttps://demo.guru99.com/test/yahoo.htmlโ;
webdriver motorista = new FirefoxMotorista();
driver.get(baseUrl);
Elemento Web downloadButton = driver.findElement(By.id(โdownload do mensageiroโ));
Tanga sourceLocation = downloadButton.getAttribute(โhrefโ);
Tanga wget_comando = โcmd /c C:\\Wget\\wget.exe -PD: โno-check-certificate โ + localizaรงรฃo de origem;
tentar {
Processo exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
System.out.println(โValor de saรญda: โ + valorDeSaรญda);
} captura (Exceรงรฃo interrompida | IOException ex) {
System.out.println(ex.toString());
}
driver.close();
}
}
Apรณs executar este cรณdigo, verifique sua unidade D e verifique se o Yahoo Messenger o instalador foi baixado com sucesso lรก.
Definindo um caminho de download personalizado com Selenium 4 CDP
Selenium A versรฃo 4 expรตe o protocolo Chrome DevTools, que permite controlar o comportamento de download do navegador sem ferramentas de terceiros. O trecho de cรณdigo abaixo direciona todos os downloads para uma pasta personalizada e ignora a solicitaรงรฃo "Salvar como", garantindo que os arquivos sejam salvos onde o teste espera.
Mapa<Tanga,objeto> parรขmetros = new HashMap<>();
params.put("comportamento", "permitir");
params.put(โcaminho de downloadโ, โD:\\selenium-downloadsโ);
driver.executeCdpCommand(โPage.setDownloadBehaviorโ, parรขmetros);
motorista.obter(โhttps://demo.guru99.com/test/yahoo.htmlโ);
driver.findElement(By.id(โdownload do mensageiroโ)).clique();
Vocรช pode verificar o download consultando o diretรณrio de destino em busca do nome de arquivo esperado e verificando seu tamanho, o que torna o teste determinรญstico sem a necessidade de scripts externos.












