J'ai une application web à tester avec Selenium. Il y a beaucoup de JavaScript qui s'exécute au chargement de la page.
Ce code JavaScript n'est pas très bien écrit mais je ne peux rien changer. Donc attendre qu'un élément apparaisse dans le DOM avec findElement()
n'est pas une option.
Je veux créer une fonction générique en Java pour attendre le chargement d'une page, une solution possible serait :
- Exécuter un script JavaScript à partir de WebDriver et stocker le résultat de l'opération.
document.body.innerHTML
dans une variable de type chaînebody
. - comparer les
body
à la version précédente debody
. s'ils sont identiques, ils incrémentent un compteur.notChangedCount
sinon, fixernotChangedCount
à zéro. - attendre un petit moment (50 ms par exemple).
- si la page n'a pas changé depuis un certain temps (500 ms par exemple), alors
notChangedCount >= 10
alors quittez la boucle, sinon revenez à la première étape.
Pensez-vous que c'est une solution valable ?
0 votes
FindElement() n'attend pas - que voulez-vous dire par là ?
2 votes
findElement
attend qu'un élément soit disponible, mais parfois l'élément est disponible avant que le code javascript soit complètement initialisé, c'est pourquoi ce n'est pas une option.0 votes
Je l'ai oublié - j'ai l'habitude d'utiliser WebDriverWait et ExpectedCondition ; c'est beaucoup plus flexible.