Tutorial di Selenium: come utilizzare il framework di testing cross-browser

Al giorno d’oggi, lo sviluppo di un’applicazione web deve tenere conto delle diverse dimensioni dei display degli utenti. L’approccio responsive, che consente a un progetto web pubblicato di adattarsi automaticamente ai requisiti tecnici del rispettivo dispositivo, si è ormai affermato come standard indiscusso. Per un sito web moderno, oltre all’elevato grado di flessibilità in termini di dimensioni dello schermo, è altrettanto importante la compatibilità con i vari browser: gli utenti dovrebbero poter accedere a un sito senza limitazioni, che sia con Firefox, Chrome, Safari o un altro client web.

Per questo motivo, il cosiddetto Cross-Browser testing svolge da anni un ruolo importante nella programmazione dei progetti web. Uno degli strumenti più diffusi per condurre tali test è il framework Selenium, rilasciato da ThoughtWorks, che esamineremo meglio in questo tutorial.

Che cos’è Selenium o Selenium WebDriver?

Al fine di ottimizzare il processo di sviluppo di un’applicazione gestionale per monitorare tempi e costi in Python, Jason Huggins ha creato nel 2004 con JavaScriptTestRunner il nucleo del framework di web testing, noto oggi come Selenium. Inizialmente, lo strumento veniva utilizzato solo internamente dalla società di software ThoughtWorks, dove Huggins lavorava a quel tempo. Dopo essere passato a Google (2007), ha proseguito con lo sviluppo e corretto i bug del software, che a quel punto era diventato open source (licenza Apache 2.0) e quindi accessibile a tutti. Dopo l’integrazione dell’API WebDriver, al framework di test è stato assegnato il suo nome attuale Selenium o Selenium WebDriver.

La versione odierna di Selenium si basa esclusivamente su HTML e JavaScript e consente agli sviluppatori di testare e registrare le interazioni con un’applicazione web, per poi ripeterle a piacere in modo del tutto automatizzato. I componenti chiave che rendono possibile questo processo di testing sono i seguenti:

  • Selenium Core: è la modalità principale che contiene le funzionalità di base del framework, tra cui JavaScriptTestRunner e l’API del comando di test principale.
  • Selenium IDE: Selenium IDE è l’ambiente di sviluppo del framework di testing, che serve, tra le altre cose, come base per l’estensione IDE per Chrome e Firefox, necessario per la registrazione e la riproduzione dei test.
  • Selenium WebDriver: WebDriver è l’interfaccia essenziale per simulare le interazioni degli utenti in qualsiasi browser, che sia Firefox, Chrome, Edge, Safari o Internet Explorer. Dal 2018, l’API è uno standard W3C ufficiale.
  • Selenium Grid: Selenium Grid è un’estensione di WebDriver o del suo predecessore Selenium Remote Control (RC), che consente di eseguire test in parallelo su più server. In questo modo permette di ridurre notevolmente la durata del test.
Per visualizzare questo video, sono necessari i cookie di terze parti. Puoi accedere e modificare le impostazioni dei cookie qui.

In quali contesti si usa Selenium WebDriver?

Selenium è un elemento fisso dell’ambiente di test e funge soprattutto come quadro di riferimento per un’ampia varietà di programmi in questo contesto. Gli esempi più noti includono il framework end-to-end Protractor, progettato specificamente per testare le applicazioni Angular e AngularJS, che utilizza l’API WebDriver per simulare le interazioni con gli utenti. Anche il software di automazione dei test Appium, progettato per app mobili native e ibride, utilizza l’interfaccia standardizzata per eseguire i test in modo facile e comodo nel linguaggio di programmazione preferito.

Un altro esempio che si basa su Selenium è il noto servizio web basato su cloud BrowserStack. Questo servizio, sviluppato in India, offre diversi abbonamenti dopo un periodo di prova gratuito e utilizza il framework di testing come base per i suoi test automatici per la versione desktop e Mobile.

N.B.

Selenium o Selenium WebDriver può naturalmente essere utilizzato anche come software open source indipendente dai programmi esistenti, come le soluzioni menzionate sopra. Con i vari componenti, che vengono combinati nel framework, questo non pone alcun problema, premesso che si disponga del know-how richiesto.

Tutorial di Selenium WebDriver: come utilizzare il framework per i test sul web

Se desiderate creare i vostri casi di test con Selenium senza dipendere da un servizio o da un produttore di software esterni, non avete necessariamente bisogno di una conoscenza specifica in materia di programmazione. Il testing dei browser con il framework, infatti, consente di scrivere gli script di test in vari linguaggi, tra cui JavaScript, Java, C#, Ruby e Python. Nel seguente tutorial di Selenium, la configurazione e l’uso del framework saranno dimostrati a titolo di esempio utilizzando Python.

N.B.

I seguenti passaggi di questo tutorial di Selenium WebDriver presuppongono che sia installata una versione attuale di Python.

Passaggio 1: installazione di Selenium

Per utilizzare Selenium WebDriver potete scegliere tra diversi client e una serie di librerie, chiamate Language Bindings”, che costituiscono la base del framework o della procedura di testing. Dovete però installare i driver dei client e le librerie per il linguaggio che volete utilizzare per gli script.

Nel nostro tutorial di Selenium WebDriver, abbiamo bisogno dei Language Bindings per Python, che possono essere installati per impostazione predefinita con il pip del gestore pacchetti Python e il seguente comando:

pip install selenium

In alternativa, è possibile scaricare il pacchetto sorgente al link indicato in precedenza, decomprimere l’archivio tar.gz e utilizzare il file setup.py per eseguire l’installazione. In questo caso, il comando richiesto è:

python setup.py install

Nella seconda fase è necessario scaricare e installare il driver del browser a cui Selenium deve connettersi. Firefox, ad esempio, richiede il driver geckodriver, le cui versioni ufficiali sono disponibili nel seguente repository di GitHub. Un elenco completo dei driver per i principali browser (Chrome, Edge, Internet Explorer, Safari, ecc.) può essere consultato nella documentazione online di Selenium.

N.B.

Se desiderate utilizzare Selenium tramite connessione remota, è necessario installare anche il componente server di Selenium. I relativi pacchetti di installazione sono disponibili nella pagina ufficiale di download del framework (alla voce “Selenium Server (Grid)”). L’esecuzione dell’applicazione server richiede una versione attuale di Java Runtime Environment (JRE).

Passaggio 2: scegliere il giusto ambiente di sviluppo (IDE)

Una volta creati i prerequisiti per utilizzare Selenium WebDriver, è possibile iniziare a scrivere script di test per il progetto web. A questo scopo, è in genere sufficiente l’editor di codice scelto, ma si consiglia di utilizzare un IDE Python (o un ambiente di sviluppo per il linguaggio con cui si desidera lavorare) per massimizzare la produttività. Alcune soluzioni conosciute e diffuse sono ad esempio:

  • PyCharm: l’IDE Python PyCharm è disponibile gratuitamente in versione open source o come versione professionale a pagamento. Gli script di test Selenium possono comunque essere scritti con entrambe le versioni. I sistemi operativi supportati sono Windows, Linux e macOS.
  • PyDev: PyDev è un plug-in Python per l’ambiente di sviluppo Eclipse, fondamentalmente progettato per lo sviluppo di applicazioni Java. L’estensione può essere scaricata e installata sia tramite la pagina del progetto che direttamente tramite l’Update Manager. PyDev o Eclipse funziona su tutti i sistemi operativi attuali di Windows, macOS e Linux più diffusi.

Passaggio 3: creare script Python per il testing del browser (Firefox) con Selenium

Una volta pronta la soluzione desiderata, è possibile iniziare a scrivere script personalizzati per automatizzare le interazioni del browser utilizzando le classi e le funzioni di Selenium. In questo tutorial di Selenium, creiamo un esempio di script Python per Firefox, che, nel browser Mozilla, chiama automaticamente il motore di ricerca Google, digita un termine di ricerca e poi valuta o registra i risultati. Sotto forma di codice, questi passaggi automatici si presentano così:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# Per creare una sessione con Firefox
driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()

# Per aprire un’applicazione web
driver.get("http://www.google.it")

# Per localizzare una casella di testo
search_field = driver.find_element_by_id("lst-ib")
search_field.clear()

# Per inserire e confermare un termine di ricerca
search_field.send_keys("Termine di ricerca")
search_field.submit()

# Per ottenere l'elenco dei risultati di ricerca visualizzati
# grazie al metodo find_elements_by_class_name
lists= driver.find_elements_by_class_name("_Rm")

# Per scorrere tutti gli elementi e riprodurre un testo personalizzato

i=0
for listitem in lists:
  print (listitem.get_attribute("innerHTML"))
  i=i+1
  if(i>10):
    break

# Per chiudere la finestra del browser
driver.quit()

Nella tabella seguente viene riepilogato il significato dei singoli componenti dello script:

Riga/righe di codice Significato
from selenium import webdriverfrom selenium.webdriver.common.keys import Keys In primo luogo, viene caricato il modulo WebDriver per implementare le classi e i metodi per supportare i vari browser. Subito dopo, lo script carica la configurazione della tastiera virtuale per poter simulare gli input della tastiera in un secondo momento.
driver = webdriver.Firefox()driver.implicitly_wait(30)driver.maximize_window() Nella seconda fase viene creata un’istanza di Firefox, che può essere controllata successivamente con i comandi Selenium. È previsto un timeout di 30 secondi per l’avvio del browser. La finestra del browser deve, inoltre, essere ingrandita.
driver.get("http://www.google.it") Ora lo script richiama la pagina italiana di Google, che serve qui come base per le interazioni automatizzate con gli utenti.
search_field = driver.find_element_by_id("lst-ib")search_field.clear() Quando viene aperto il motore di ricerca, lo script cerca la casella di testo di Google, che è caratterizzata dall’attributo ID "lst-ib". Non appena viene individuata, il campo di ricerca viene dapprima svuotato utilizzando il metodo clear().
search_field.send_keys("Termine di ricerca")search_field.submit() Segue l’inserimento del testo “Termine di ricerca”, che viene confermato con il metodo submit().
lists= driver.find_elements_by_class_name("_Rm") I singoli risultati di ricerca sono elencati come elementi <a>. In modo che possano essere controllati dal metodo find_elements_by_class_name, è necessario introdurlo a questo punto nello script.
i=0for listitem in lists: print (listitem.get_attribute("innerHTML")) i=i+1 if(i>10): break Nell’ultimo passaggio attivo, lo script visualizza l’elenco dei risultati ottenuti, limitandolo alle prime dieci voci con tag <a>.
driver.quit() La riga di codice finale assicura che l’istanza del browser venga terminata.
N.B.

L’esempio utilizzato in questo tutorial di Selenium mostra chiaramente quanto il framework sia adatto per il testing dei browser. Mostra, inoltre, che Selenium WebDriver è altrettanto interessante per il Web Scraping con Python, un altro dei numerosi usi della suite di testing. Potete ottenere informazioni più dettagliate su questa raccolta di dati dal web nel nostro articolo “Che cos’è il Web Scraping?”.

Selenium WebDriver: non adatto a tutti gli scenari

Selenium o Selenium WebDriver offre strumenti di prima classe per raccogliere importanti dati di siti web e simulare le interazioni con gli utenti. Il framework open source non è, tuttavia, adatto a tutte le aree di applicazione, come chiariscono gli sviluppatori nel loro elenco dei “Worst cases” (casi peggiori). I casi o i contenuti di siti web che non è possibile testare o acquisire con Selenium includono i seguenti:

  • Captcha: i captcha, ormai molto noti e largamente diffusi, sono stati appositamente sviluppati per proteggere da bot e spam e non sono quindi utilizzabili per processi di automazione con Selenium. Questi test di verifica devono quindi essere disattivati o temporaneamente sostituiti da un elemento alternativo durante il testing o lo scraping.
  • Download di file: nelle istanze Selenium è possibile iniziare il download di file tramite un clic simulato del link, ma l’API non mostra l’avanzamento del processo di download.
  • Codici di risposta HTTP: Selenium presenta alcuni punti deboli nella gestione dei codici di stato HTTP. Tuttavia, questi svantaggi possono essere compensati, se necessario, con l’uso di un proxy aggiuntivo.
  • Accesso a servizi di terze parti: che si tratti di una piattaforma di social media, di un servizio cloud o di un account e-mail, non è consigliabile accedere a fornitori di terze parti tramite una sessione di Selenium. Da un lato, i fornitori di tali servizi forniscono API proprie a fini di testing e, dall’altro, in tali casi, i test con il framework sono molto onerosi.
  • Testing delle prestazioni: Selenium WebDriver non è adatto per semplici testing di performance, perché il framework non è progettato per questo scopo.
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.