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.

  • ๐Ÿ“ค Metodo di caricamento: Utilizza il metodo sendKeys() sull'elemento di input file per inviare il percorso assoluto del file senza fare clic su Sfoglia.
  • ๐Ÿ“ฅ Percorso di download: Configura una directory di download personalizzata tramite ChromeOptions o CDP Page.setDownloadBehavior in Selenium 4.
  • ๐ŸชŸ Dialoghi nativi: Attiva gli script di AutoIt o java.awt.Robot quando il selettore di file del sistema operativo impedisce a WebDriver di interagire.
  • ๐Ÿค– Assistenza AI: L'intelligenza artificiale generativa suggerisce selettori, crea file di dati di test e convalida automaticamente l'integritร  dei file scaricati.
  • ๐Ÿ›ก๏ธ Controllo di convalida: Conferma l'avvenuto caricamento tramite i messaggi di risposta e verifica i download confrontando le dimensioni del file o il checksum.

Come caricare e scaricare un file utilizzando Selenium

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.

Carica file in Selenium
Gestisci il popup di caricamento file in Selenium Webdriver

Diciamo che vogliamo caricare il file โ€œC:\newhtml.htmlโ€. Il nostro codice WebDriver dovrebbe essere come quello mostrato di seguito.

pacchetto nuovo progetto;
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.

Carica file in Selenium

Ricorda queste due cose quando carichi file in WebDriver:

  1. Non รจ necessario simulare il clic sul pulsante "Sfoglia". WebDriver inserisce automaticamente il percorso del file nella casella di testo di selezione file del elemento.
  2. Quando imposti il โ€‹โ€‹percorso del file nel tuo Java IDE, utilizza il carattere di escape corretto per la barra rovesciata.

Carica file in Selenium

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.

; upload.au3 โ€“ attende la finestra di dialogo Apri e digita il percorso del file
WinWaitActive("Aperto")
Inviare(โ€œC:\newhtml.htmlโ€)
Inviare(โ€œ{INVIO}โ€)

Da Java, attiva l'helper dopo il clic su Sfoglia:

driver.findElement(By.id(โ€œBrowseBtnโ€)).clic();
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.

Configurazione di Wget

Passo 2) Apri Esegui premendo Windows Premi il tasto "R"; digita "cmd" e fai clic su OK.

Configurazione di Wget

Digita il comando "cd /" per spostarti nella directory principale.

Configurazione di Wget

Passo 3) Digita il comando per verificare se la configurazione specificata funziona correttamente.

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

Configurazione di Wget

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.

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

Configurazione di Wget

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.

Utilizzando WebDriver e Wget

Passo 1) Importare il pacchetto โ€œjava.io.IOExceptionโ€ perchรฉ dovremo intercettare un IOException piรน avanti nel passaggio 4.

Utilizzando WebDriver e Wget

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

Utilizzando WebDriver e Wget

Passo 3) Imposta la sintassi per wget utilizzando il seguente comando.

Utilizzando WebDriver e Wget

Passo 4) Avvia il processo di download chiamando wget dal nostro codice WebDriver.

Utilizzando WebDriver e Wget

Per riassumere, il codice del tuo WebDriver potrebbe assomigliare a quello mostrato di seguito.

pacchetto nuovo progetto;
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รฌ.

Utilizzando WebDriver e Wget

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.

ChromeDriver conducente = new Driver Chrome();
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.

DOMANDE FREQUENTI

Selenium chiama sendKeys() su elemento con il percorso assoluto del file. Il browser compila direttamente il campo, quindi non si apre alcuna finestra di dialogo di selezione file del sistema operativo e non รจ necessario fare clic su Sfoglia.

Quando la pagina non espone un input di file, usa AutoIt su Windows oppure la classe java.awt.Robot. Questi strumenti digitano il percorso nella finestra di dialogo del sistema operativo attivo e premono Invio dopo aver fatto clic sul pulsante Sfoglia.

Chiama executeCdpCommand(โ€œPage.setDownloadBehaviorโ€, params) con il comportamento impostato su consenti e downloadPath impostato sulla tua cartella. Selenium 4 inoltra il comando agli Strumenti per sviluppatori di Chrome e la richiesta di salvataggio con nome viene saltata.

Sรฌ. Gli assistenti basati sull'IA leggono il modulo di caricamento, suggeriscono i selettori, generano file limite come campioni vuoti, di dimensioni eccessive o con estensione errata e scrivono il blocco sendKeys(). Questo riduce i tempi di configurazione e individua i casi limite che i tester umani spesso non riescono a rilevare.

Strumenti di intelligenza artificiale Il sistema analizza la cartella di destinazione, confronta le dimensioni e il checksum dei file con i valori previsti e segnala le discrepanze. I modelli di visione artificiale possono persino aprire PDF o immagini e confermare che il contenuto corrisponda all'etichetta del collegamento, eliminando la necessitร  di una revisione manuale durante le analisi di regressione.

Wget bypassa completamente il browser e salva il file direttamente su disco tramite un processo da riga di comando. รˆ utile su sistemi legacy Selenium 2 o 3 configurazioni in cui le preferenze di download di CDP e ChromeOptions non sono disponibili.

Riassumi questo post con: