Como fazer upload e download de um arquivo usando Selenium Driver da Web

Carregar arquivo em selênio

O upload 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 carregado.

Neste tutorial, aprenderemos como lidar com uploads e downloads de arquivos.

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.

package newproject;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG9 {
    public static void main(String[] args) {
        System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
        String baseUrl = "https://demo.guru99.com/test/upload/";
        WebDriver driver = new FirefoxDriver();

        driver.get(baseUrl);
        WebElement uploadElement = driver.findElement(By.id("uploadfile_0"));

        // enter the file path onto the file-selection input field
        uploadElement.sendKeys("C:\\newhtml.html");

        // check the "I accept the terms of service" check box
        driver.findElement(By.id("terms")).click();

        // click the "UploadFile" button
        driver.findElement(By.name("send")).click();
        }
}

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 de seguir duas coisas ao enviar arquivos no WebDriver

  1. Não há necessidade de simular o clique no botão “Navegar”. O WebDriver insere automaticamente o caminho do arquivo na caixa de texto de seleção de arquivo 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

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

Configurando o Wget

Passo 2) Abra Executar pressionando a tecla Windows + “R”; digite “cmd e clique em ok

Configurando o Wget

Digite o comando “cd /” para ir para 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 -P C: --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 Driver da Web. 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, definitivamente funcionará em Eclipse.

Em nosso exemplo, conforme mostrado na etapa 3, há um problema ao gravar na unidade C. Vamos alterar o local do download para a unidade D e verificar os resultados.

cmd /c C:\\Wget\\wget.exe -P D: --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 Messenger. Nosso URL base 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 getAttribute() para obter o valor “href” do link de download e salve-o como uma variável String. Neste caso, nomeamos a variável como “sourceLocation”.

Usando WebDriver e Wget

Passo 3) Configure a sintaxe do 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.

package newproject;
import java.io.IOException;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG8 {
    public static void main(String[] args) {
        
        System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
                String baseUrl = "https://demo.guru99.com/test/yahoo.html";
        WebDriver driver = new FirefoxDriver();

        driver.get(baseUrl);
        WebElement downloadButton = driver.findElement(By
        .id("messenger-download"));
        String sourceLocation = downloadButton.getAttribute("href");
        String wget_command = "cmd /c C:\\Wget\\wget.exe -P D: --no-check-certificate " + sourceLocation;

        try {
        Process exec = Runtime.getRuntime().exec(wget_command);
        int exitVal = exec.waitFor();
        System.out.println("Exit value: " + exitVal);
        } catch (InterruptedException | 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

Resumo

  • O upload 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 carregado.
  • O WebDriver não pode automatizar o download de arquivos por conta própria.
  • A maneira mais fácil de baixar arquivos usando WebDriver é usar Wget.