2009-08-28 15 views
0

Lorsque j'utilise webrat en mode sélénium, visit revient rapidement, comme prévu. Pas de problème. J'essaye d'affirmer que mes styles sont appliqués correctement (en regardant des images de fond sur différents éléments). Je suis capable d'obtenir cette information via JS, mais il semble que les feuilles de style n'ont pas été chargées et/ou appliquées pendant mon test.Comment obtenir webrat/sélenium pour "attendre" le CSS de la page à charger?

Je vois que vous pouvez "attendre" que les éléments apparaissent, mais je ne vois pas comment je peux attendre que tous les styles soient appliqués. Je peux mettre un retard général, mais cela semble être une sensation de fadeur ou de lenteur, que j'essaie d'éviter.

De toute évidence puisque je sais quels styles je cherche, je peux attendre leur apparition. Je vais écrire une telle aide, mais je pensais qu'il pourrait y avoir un mécanisme plus général déjà en place que je n'ai pas vu.

Y at-il un moyen facile de détecter que la page est vraiment "prête"?

Répondre

2

C'est étrange. Je sais que wait_for_page_to_load attend toute la page, feuilles de style incluses.

Si vous pensez toujours qu'il n'attend pas comme il se doit, vous pouvez utiliser wait_for_condition qui exécutera un javascript et attendre que la fonction retourne true. Voici un exemple:

@selenium.wait_for_condition "selenium.browserbot.getCurrentWindow().document.body.style.backgroundColor == 'white'", "60000" 
+0

Merci. Cela va probablement le faire. Nous avons eu toutes sortes de problèmes en train d'extraire l'image de fond actuelle d'un élément. En fait, nous ne pouvions pas simuler un "hover" pour que le sélecteur CSS: hover fonctionne, et finit par utiliser JS pour changer de style, afin de détecter le changement de manière fiable dans le sélénium. – ndp

0

Nous avons couru dans cette lorsqu'une page relevais chargée même si une partie de Cold Fusion accédait encore une base de données pour les informations à afficher. Le traitement subséquent se produirait alors trop tôt.

Regardez la classe d'attente abstraite dans l'API Selenium. Vous pouvez écrire votre propre clause personnalisée until() qui pourrait tester l'affichage de certains textes, le texte à supprimer (dans le cas d'un message flottant qui disparaît une fois le chargement terminé) ou tout autre événement que vous pouvez tester dans le répertoire du sélénium. La page API a même un bel exemple qui aide beaucoup à la configurer.