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.innerHTMLin una variabile stringabody. - confronta la
bodyvariabile con la versione precedente dibody. se sono uguali allora impostare incrementare un contatorenotChangedCountaltrimenti impostarenotChangedCounta 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 >= 10quindi esci dal ciclo altrimenti passa al primo passaggio.
Pensi che sia una soluzione valida?
findElementattende che un elemento sia disponibile, ma a volte l'elemento è disponibile prima che il codice javascript sia inizializzato completamente, ecco perché non è un'opzione.