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.

  • ๐Ÿ“ค Mรฉtodo de upload: Use o mรฉtodo sendKeys() no elemento de entrada de arquivo para inserir o caminho absoluto do arquivo sem clicar em Procurar.
  • ๐Ÿ“ฅ Caminho para download: Configure um diretรณrio de download personalizado atravรฉs do ChromeOptions ou do CDP Page.setDownloadBehavior em Selenium 4.
  • ๐ŸชŸ Diรกlogos nativos: Acione scripts AutoIt ou java.awt.Robot quando o seletor de arquivos do sistema operacional bloquear a interaรงรฃo do WebDriver.
  • ๐Ÿค– Assistรชncia de IA: A IA generativa sugere seletores, cria arquivos de dados de teste e valida automaticamente a integridade dos arquivos baixados.
  • ๐Ÿ›ก๏ธ Verificaรงรฃo de validaรงรฃo: Confirme o sucesso do upload atravรฉs das mensagens de resposta e verifique os downloads comparando o tamanho do arquivo ou o checksum.

Como fazer upload e download de um arquivo usando Selenium

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.

Carregar arquivo em Selenium
Lidar com o pop-up de upload de arquivo em Selenium Driver da Web

Digamos que desejamos fazer upload do arquivo โ€œC:\newhtml.htmlโ€. Nosso cรณdigo WebDriver deve ser como o mostrado abaixo.

pacote novoprojeto;
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.

Carregar arquivo em Selenium

Lembre-se dos dois pontos a seguir ao fazer upload de arquivos no WebDriver:

  1. 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.
  2. Ao definir o caminho do arquivo em seu Java IDE, use o caractere de escape adequado para a barra invertida.

Carregar arquivo em Selenium

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.

; upload.au3 โ€“ aguarda a caixa de diรกlogo Abrir e digita o caminho do arquivo
WinWaitActive("Aberto")
Enviar(โ€œC:\newhtml.htmlโ€)
Enviar("{DIGITAR}")

Desde Java, acione o auxiliar apรณs o clique em Procurar:

driver.findElement(By.id(โ€œbotรฃo de navegaรงรฃoโ€)).clique();
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.

Configurando o Wget

Passo 2) Abra o Run pressionando Windows Tecla + โ€œRโ€; digite โ€œcmdโ€ e clique em OK.

Configurando o Wget

Digite o comando โ€œcd /โ€ para acessar o diretรณrio raiz.

Configurando o Wget

Passo 3) Digite o comando para verificar se a configuraรงรฃo fornecida estรก funcionando.

cmd /c C:\\Wget\\wget.exe -PC: โ€“no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

Configurando o Wget

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.

cmd /c C:\\Wget\\wget.exe -PD: โ€“no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

Configurando o Wget

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.

Usando WebDriver e Wget

Passo 1) Importe o pacote โ€œjava.io.IOExceptionโ€ porque teremos que capturar uma IOException posteriormente na Etapa 4.

Usando WebDriver e Wget

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".

Usando WebDriver e Wget

Passo 3) Configure a sintaxe para o wget usando o seguinte comando.

Usando WebDriver e Wget

Passo 4) Inicie o processo de download chamando wget do nosso cรณdigo WebDriver.

Usando WebDriver e Wget

Resumindo, o cรณdigo do WebDriver pode ser semelhante ao mostrado abaixo.

pacote novoprojeto;
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รก.

Usando WebDriver e Wget

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.

ChromeDriver motorista = new ChromeDriver ();
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.

Perguntas Frequentes

Selenium chama sendKeys() no Elemento com o caminho absoluto do arquivo. O navegador preenche o campo diretamente, portanto, nenhum seletor de arquivos do sistema operacional รฉ aberto e nenhum clique em "Procurar" รฉ necessรกrio.

Quando a pรกgina nรฃo disponibiliza um campo de entrada de arquivo, use o AutoIt. Windows ou a classe java.awt.Robot. Essas ferramentas digitam o caminho na caixa de diรกlogo do sistema operacional ativo e pressionam Enter depois de clicar no botรฃo Procurar.

Chame executeCdpCommand(โ€œPage.setDownloadBehaviorโ€, params) com behavior definido como allow e downloadPath definido para sua pasta. Selenium A opรงรฃo 4 encaminha o comando para o Chrome DevTools e a janela "Salvar como" รฉ ignorada.

Sim. Os assistentes de IA leem seu formulรกrio de upload, sugerem seletores, geram arquivos de teste, como amostras vazias, com tamanho excessivo ou com extensรฃo incorreta, e escrevem o bloco sendKeys(). Isso reduz o tempo de configuraรงรฃo e revela casos extremos que os testadores humanos costumam nรฃo perceber.

Ferramentas AI O sistema consulta a pasta de destino, compara o tamanho e o checksum dos arquivos com os valores esperados e sinaliza as incompatibilidades. Os modelos de visรฃo podem atรฉ mesmo abrir PDFs ou imagens e confirmar se o conteรบdo corresponde ao rรณtulo do link, eliminando a necessidade de revisรฃo manual nas execuรงรตes de regressรฃo.

O Wget ignora completamente o navegador e salva o arquivo diretamente no disco atravรฉs de um processo de linha de comando. ร‰ รบtil em sistemas legados. Selenium 2 ou 3 configuraรงรตes onde as preferรชncias de download do CDP e do ChromeOptions nรฃo estรฃo disponรญveis.

Resuma esta postagem com: