Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Form avanzati

Form avanzati e Web testing in Python: sperimentare l'interazione degli elementi a livello di interfaccia visuale
Form avanzati e Web testing in Python: sperimentare l'interazione degli elementi a livello di interfaccia visuale
Link copiato negli appunti

Parliamo ora di Web Testing in Python e form avanzati. Nella lezione precedente abbiamo visto come interagire con i form utilizzando le operazioni principali: inserimento dati nei campi di testo, click sui pulsanti, lettura di valori e - altro aspetto importante - lettura del testo di alert.

I form sono tuttavia ricchi di elementi diversi che permettono agli utenti di formulare al meglio le loro richieste. In questa lezione incontriamo pertanto altre componenti importanti ed impariamo ad interagire con queste mediante Selenium.

Elementi comuni dei form

Oltre a campi di testo in cui possiamo immettere valori mediante il metodo send_keys e pulsanti che possiamo "cliccare" in automatico con click, troveremo molto spesso nei form anche:

  • radio button: elementi di forma circolare a mutua esclusione. Tipicamente ne selezioneremo uno e ciò escluderà la possibilità di selezionarne altri dello stesso gruppo;
  • checkbox: casella di forma rettangolare che potremo "flaggare" se interessati all'opzione che rappresenta;
  • select: il classico menu a tendina drop-down in cui sceglieremo quale voce attivare;
  • textarea: campo più esteso per la scrittura di testo.

Form avanzati

Con questi elementi impareremo ad interagire con buona parte delle componenti che troveremo nei form web ma la cosa più interessante è che, senza saperlo, lo sappiamo già fare!

Questi elementi infatti sono essenzialmente tutti pulsanti e campi testo pertanto Selenium ci richiederà di:

  • scegliere l'elemento a cui siamo interessati (un radio button, una singola voce del menu a tendina, etc.) utilizzando i classici meccanismi che conosciamo (id, nome del tag, XPath);
  • eseguire un click se si tratta essenzialmente di un pulsante (checkbox, option di un menu a discesa, radio button) o immettere dati con send_keys se è una textarea o un campo di input.

Proviamo subito.

Il form

Scriviamo un semplice form che mostrerà gli elementi menzionati e, al click del button, serializzerà tutto in formato JSON per immetterlo in un div. Da quest'ultimo lo leggeremo e lo stamperemo a console.

Ecco il form:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
  <form>
      <label for="nome">Nome:</label>
      <input type="text" id="nome" name="nome"><br><br>
      <label for="abbonamento">Abbonamento:</label>
      <input type="radio" name="abbonamento" id="gold" value="gold">
      <label for="gold">Gold</label>
      <input type="radio" name="abbonamento" id="premium" value="premium">
      <label for="premium">Premium</label> <br><br>
      <label for="Titolo di studio">Titolo: </label>
      <select name="titolo" id="titolo">
          <option>Che studi hai fatto?</option>
          <option value="diploma">Diploma</option>
          <option value="laurea">Laurea</option>
          <option value="laurea_magistrale">Laurea magistrale</option>
      </select><br><br>
      <label for="commento">Commento:</label><br>
      <textarea name="commento" id="commento" cols="35" rows="5"></textarea><br><br>
      <input type="checkbox" name="contatto" id="contatto"> Voglio essere contattato<br><br>
      <button type="button" value="Invio">Invio</button>
  </form>
  <div id="risultato"></div>
<script>
$(document).ready(function(){
  $("button").click(function(){
    $("#risultato").text(
     JSON.stringify($('form').serializeArray()))
  });
});
</script>
</body>
</html>

Come vediamo abbiamo creato una sorta di form per la raccolta di commenti in cui richiediamo alcune informazioni all'utente sfruttando tutti gli elementi delle tipolgie che abbiamo citato.

Il codice Python per i forma avanzati

Partendo dall'ipotesi di avere un oggetto driver pronto, animato con il motore browser che preferiamo, scriviamo questo codice Python:

def test_form(driver):
    # ricerchiamo per ID  il campo "nome"
    nome=driver.find_element(By.ID, "nome")
    # selezioniamo per ID  il radio button "premium"
    driver.find_element(By.ID, "premium").click()
    # selezioniamo con XPath l'option corrispondente all'etichetta "Laurea"
    driver.find_element(By.XPATH, "//option[text()='Laurea']").click()
    # selezioniamo per ID la textarea
    commento=driver.find_element(By.ID, "commento")
    # selezioniamo la checkbox "contatto"
    driver.find_element(By.ID, "contatto").click()
    # selezioniamo il pulsante "Invio" per TAG
    invio=driver.find_element(By.TAG_NAME, "button")
    # inseriamo il testo nel nome e nel commento
    nome.send_keys("Achille")
    commento.send_keys("Corso molto interessante")
    # clicchiamo sul pulsante
    invio.click()
    # restituiamo il contenuto del form
    risultato=driver.find_element(By.ID, "risultato")
    return risultato.text
driver.get('http://localhost/form_avanzato.html')
print(test_form(driver))

Per comodità di invocazione abbiamo racchiuso il tutto in una funzione e l'abbiamo attivata. In output, vediamo apparire sulla console questa struttura dati:

[{"name":"nome","value":"Achille"},
{"name":"abbonamento","value":"premium"},
{"name":"titolo","value":"laurea"},
{"name":"commento","value":"Corso molto interessante"},
{"name":"contatto","value":"on"}]

Come vediamo, siamo riusciti a passare i valori che ci interessano e li abbiamo estrapolati in un array JSON.

I form in realtà, spesso, inviano i dati a backend remoti che attivano elaborazioni. Al momento ci fermiamo qui in quanto il nostro scopo era prevalentemente sperimentare l'interazione a livello di interfaccia visuale ma siamo quasi pronti per poter interagire con una reale applicazione web, completa di più pagine e funzionamento backend in cui inseriremo dati in un form e dovremo capire come creare un test completo per verificarne la corretta elaborazione.

Ti consigliamo anche