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.
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.
Lembre-se de seguir duas coisas ao enviar arquivos no WebDriver
- 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
- Ao definir o caminho do arquivo em seu Java IDE, use o caractere de escape adequado para a barra invertida.
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.
Passo 2) Abra Executar pressionando a tecla Windows + “R”; digite “cmd e clique em ok
Digite o comando “cd /” para ir para o diretório raiz
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
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
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.
Passo 1) Importe o pacote “java.io.IOException” porque teremos que capturar uma IOException posteriormente na Etapa 4.
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”.
Passo 3) Configure a sintaxe do 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.
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á.
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.