Come caricare e scaricare un file utilizzando Selenium
โก Riepilogo intelligente
Carica e scarica il file utilizzando Selenium I flussi di lavoro di WebDriver si basano su sendKeys() nativo per i campi di input, AutoIt o Robot per le finestre di dialogo e comandi CDP in Selenium 4. Impostare percorsi di download sicuri durante le esecuzioni automatizzate.

Il caricamento dei file in WebDriver avviene semplicemente utilizzando il metodo sendKeys() sul campo di input file-select per inserire il percorso del file da caricare. In questo tutorial imparerai come gestire il caricamento e il download dei file utilizzando Selenium WebDriver.
Come caricare il file in Selenium
Per questa sezione utilizzeremo https://demo.guru99.com/test/upload/ come nostra applicazione di prova. Questo sito consente facilmente a qualsiasi visitatore di caricare file senza richiedere la registrazione.

Diciamo che vogliamo caricare il file โC:\newhtml.htmlโ. Il nostro codice WebDriver dovrebbe essere come quello mostrato di seguito.
importare org.openqa.selenium.*;
importare org.openqa.selenium.firefox.FirefoxAutista;
classe pubblica PG9 {
vuoto statico pubblico principale(Corda[] argomenti) {
System.setProperty(โwebdriver.gecko.driverโ,โC:\\geckodriver.exeโ);
Corda URL di base = โhttps://demo.guru99.com/test/upload/โ;
webdriver conducente = new FirefoxAutista();
driver.get(baseUrl);
Elemento Web uploadElement = driver.findElement(By.id(โuploadfile_0โ));
// inserisci il percorso del file nel campo di input per la selezione del file
uploadElement.sendKeys(โC:\\newhtml.htmlโ);
// Seleziona la casella di controllo โAccetto i termini di servizioโ
driver.findElement(By.id("termini")).clic();
// clicca sul pulsante โCaricaFileโ
driver.findElement(By.name("Inviare")).clic();
}
}
Dopo aver eseguito questo script, dovresti essere in grado di caricare il file con successo e dovresti ricevere un messaggio simile a questo.
Ricorda queste due cose quando carichi file in WebDriver:
- Non รจ necessario simulare il clic sul pulsante "Sfoglia". WebDriver inserisce automaticamente il percorso del file nella casella di testo di selezione file del elemento.
- Quando imposti il โโpercorso del file nel tuo Java IDE, utilizza il carattere di escape corretto per la barra rovesciata.
Gestione delle finestre di dialogo di caricamento non di input con AutoIt
Quando la pagina utilizza un pulsante Sfoglia personalizzato anzichรฉ un pulsante nativo elemento, sendKeys() non funziona. In tal caso, puoi chiamare uno script AutoIt da Selenium Digitare il percorso del file nella finestra di dialogo del sistema operativo e premere Invio.
Salva lo script qui sotto come upload.au3, compilalo in upload.exe, quindi invocarlo da Java dopo aver cliccato sul pulsante Sfoglia.
WinWaitActive("Aperto")
Inviare(โC:\newhtml.htmlโ)
Inviare(โ{INVIO}โ)
Da Java, attiva l'helper dopo il clic su Sfoglia:
Runtime.getRuntime().exec(โC:\\AutoIt\\upload.exeโ);
La classe java.awt.Robot รจ una classe pura-Java alternativa quando AutoIt non รจ disponibile, anche se AutoIt รจ piรน affidabile su Windows perchรฉ attende la finestra di dialogo tramite il titolo.
Come scaricare un file in Selenium Webdriver
WebDriver non ha la capacitร di accedere alle finestre di dialogo Download presentati dai browser quando clicchi su un link o un pulsante di download. Tuttavia, possiamo bypassare queste finestre di dialogo usando un programma separato chiamato "wget".
Cos'รจ Wget?
Wget รจ un programma da riga di comando piccolo e facile da usare utilizzato per automatizzare i download. Fondamentalmente, accederemo a Wget dal nostro script WebDriver per eseguire il processo di download.
Configurazione di Wget
Passo 1) Nel tuo C Drive, crea una nuova cartella e chiamala "Wget".
Scarica wget.exe da qui e posizionatelo nella cartella Wget che avete creato nel passaggio precedente.
Passo 2) Apri Esegui premendo Windows Premi il tasto "R"; digita "cmd" e fai clic su OK.
Digita il comando "cd /" per spostarti nella directory principale.
Passo 3) Digita il comando per verificare se la configurazione specificata funziona correttamente.
Sembra che ci sia un problema durante la scrittura nell'unitร C.
Passo 4) ร necessario eseguire il debug degli errori di wget nella riga di comando prima di eseguire il codice utilizzando Selenium WebDriver. Questi errori persisteranno in Eclipse e i messaggi di errore non saranno altrettanto informativi. ร meglio prima far funzionare wget usando la riga di comando. Se funziona nella riga di comando, funzionerร sicuramente anche in Eclipse.
Nel nostro esempio, come mostrato nel passaggio 3, si verifica un problema di scrittura nell'unitร C. Proviamo a cambiare la posizione di download nell'unitร D e verifichiamo i risultati.
Messenger รจ stato scaricato con successo.
Prima di procedere, non dimenticate di eliminare il file scaricato.
Utilizzando WebDriver e Wget
Nell'esempio seguente, useremo WebDriver e wget per scaricare un popolare software di chat chiamato Yahoo MessengerLa nostra base URL deve essere https://demo.guru99.com/test/yahoo.html.
Passo 1) Importare il pacchetto โjava.io.IOExceptionโ perchรฉ dovremo intercettare un IOException piรน avanti nel passaggio 4.
Passo 2) Utilizza il metodo getAttribute() per ottenere il valore "href" del link di download e salvarlo come variabile di tipo String. In questo caso, abbiamo chiamato la variabile "sourceLocation".
Passo 3) Imposta la sintassi per wget utilizzando il seguente comando.
Passo 4) Avvia il processo di download chiamando wget dal nostro codice WebDriver.
Per riassumere, il codice del tuo WebDriver potrebbe assomigliare a quello mostrato di seguito.
importare java.io.IOException;
importare org.openqa.selenium.*;
importare org.openqa.selenium.firefox.FirefoxAutista;
classe pubblica PG8 {
vuoto statico pubblico principale(Corda[] argomenti) {
System.setProperty(โwebdriver.gecko.driverโ,โC:\\geckodriver.exeโ);
Corda URL di base = โhttps://demo.guru99.com/test/yahoo.htmlโ;
webdriver conducente = new FirefoxAutista();
driver.get(baseUrl);
Elemento Web downloadButton = driver.findElement(By.id(โscaricamento tramite messengerโ));
Corda sourceLocation = downloadButton.getAttribute(โhrefโ);
Corda wget_command = โcmd /c C:\\Wget\\wget.exe -PD: โno-check-certificate โ + posizione_origine;
prova {
Processo exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
System.out.println(โValore di uscita: โ + exitVal);
} prendere (InterruptException | IOException es) {
System.out.println(ex.toString());
}
driver.close();
}
}
Dopo aver eseguito questo codice, controlla l'unitร D e verifica che Yahoo Messenger il programma di installazione รจ stato scaricato correttamente lรฌ.
Impostazione di un percorso di download personalizzato con Selenium 4 CDP
Selenium La versione 4 espone il protocollo Chrome DevTools, che consente di controllare il comportamento di download del browser senza strumenti di terze parti. Il frammento di codice seguente indirizza tutti i download a una cartella personalizzata e ignora la richiesta di salvataggio con nome, in modo che i file vengano salvati nella posizione prevista dal test.
Mappa<Corda,Oggetto> parametri = new HashMap<>();
params.put("comportamento", "permettere");
params.put(โPercorso di downloadโ, โD:\\selenium-downloadsโ);
driver.executeCdpCommand(โPage.setDownloadBehaviorโ, parametri);
driver.get(โhttps://demo.guru99.com/test/yahoo.htmlโ);
driver.findElement(By.id(โscaricamento tramite messengerโ)).clic();
ร possibile verificare il download controllando la directory di destinazione per il nome del file previsto e verificandone le dimensioni, il che rende il test deterministico senza bisogno di script esterni.












