Ho un'applicazione web da testare con Selenium. C'è molto JavaScript in esecuzione al caricamento della pagina.
Questo codice JavaScript non è scritto così bene ma non posso cambiare nulla. Quindi aspettare che un elemento appaia nel DOM con il findElement()
metodo non è un'opzione.
Voglio creare una funzione generica in Java per attendere il caricamento di una pagina, una possibile soluzione sarebbe:
- eseguire uno script JavaScript da WebDriver e memorizzare il risultato di
document.body.innerHTML
in una variabile stringabody
. - confronta la
body
variabile con la versione precedente dibody
. se sono uguali allora impostare incrementare un contatorenotChangedCount
altrimenti impostarenotChangedCount
a zero. - attendere un po 'di tempo (ad esempio 50 ms).
- se la pagina non è cambiata per un po 'di tempo (500 ms ad esempio)
notChangedCount >= 10
quindi esci dal ciclo altrimenti passa al primo passaggio.
Pensi che sia una soluzione valida?
findElement
attende che un elemento sia disponibile, ma a volte l'elemento è disponibile prima che il codice javascript sia inizializzato completamente, ecco perché non è un'opzione.