Je voudrais une suite de tests Web automatisés basée sur Selenium RC pour prendre des captures d'écran de pages lorsque certaines erreurs sont rencontrées. La suite de tests fait partie du processus d'intégration continue et est techniquement exécutée par Cruisecontrol en cours d'exécution sous la forme d'un service Windows fort>. p>
Le Le problème est que les captures d'écran ne sont que Lorsque vous exécutez manuellement les mêmes tests de Eclipse, les captures d'écran sont correctes (elles sont alléchantes, elles sont des captures d'écran de l'ensemble de la fenêtre du navigateur, mais c'est une histoire différente et une question mineure). Donc, je suppose que la cause du problème est que le sélénium étant exécuté en tant que service Windows. P>
Comment puis-je avoir les captures d'écran des pages prises lorsque des exceptions dans les tests de sélénium se produisent? p>
Le logiciel utilisé: p>
sélénium.CapturesCreenshot () code> est appelé pour déclencher la capture d'écran réelle. J'ai enregistré un junit
Runlistener code> pour l'appeler sur tout échec de test. P>
7 Réponses :
Voici quelques codes pour prendre des photos à l'aide de SELENIUM et de la classe de robot Java: il est extrait de ce site p> p>
Merci. Je vais donner celui-ci un essai. Mais je doute que cela puisse aider. J'ai déjà vu ce site. En réalité, la mise en œuvre du sélénium de la commande "capturesCreenshot" semble utiliser exactement la même technique: tinyurl.com/selenium1260106
@Grezegorzoledzki - J'ai soupçonné que le sélénium puisse prendre la même approche. S'il vous plaît laissez-nous savoir si cela fonctionne et bonne chance.
Confirmé. Le comportement est exactement le même. Le robot a généré une image complètement vide (noire) avec exactement la même taille. Donc, pas de progrès ...
J'ai essayé de faire un contrôle avec d'autres personnes de sélénium, mais ils n'ont pas rencontré la question. S'il n'y a pas une autre façon d'y aller, contactez le sélénium et la journalisation d'un bug peut aider à éliminer le problème.
Stab-in-the-The-The-The-The-The Dark-In-The-Dark-In-Hight et affectez-vous des captures d'écran? Et si vous désactivez complètement l'économiseur d'écran (vide).
Screensaver: L'utilisateur Le service est en cours d'exécution, de même que l'économiseur d'écran défini, mais pas un écran vide. C'était un peu de logo Microsoft. De toute façon, j'ai désactivé l'économiseur d'écran de l'utilisateur et le résultat est le même.
Lire un peu plus sur ceci, cela pourrait être quelque chose à voir avec votre service Windows nécessitant des autorisations de sécurité supplémentaires. Retour à Windows NT 3.5 / 4 Services avait Accès restreint sur le bureau de l'application (requis pour les captures d'écran ) Et je suppose que leurs restrictions de sécurité continuent à ce jour. P>
Le lien Java.Net semble suggérer d'utiliser la connexion VNC à localhost. Je le vois comme un dernier recours. Si un appel distant est nécessaire, rien ne devrait nous empêcher d'appeler le serveur Selenium sur une machine Linux avec un support XServer approprié. Mais cela complique beaucoup l'infrastructure de construction et j'espère que cela pourrait être évité.
Quel navigateur utilisez-vous ces tests? Si c'est Firefox, je recommanderais à la CaptureTentiEpagesCreenshot de capturer toute la toile - pas seulement de ce qui est en mesure (plutôt que de l'écran) et de capturetentrePagesCreenshottostring si vous travaillez à distance et que vous souhaitez enregistrer les fichiers localement. P>
Je ne sais pas si cela vous aidera avec votre problème, mais comme il utilise un complément à Firefox, cela pourrait valoir la peine d'essayer. P>
Firefox est utilisé. Pas vraiment sûr de quelle version, je devrais le vérifier. Quoi qu'il en soit, merci pour le conseil - je vais vérifier.
HM ... J'étais sur le point d'écrire que la suggestion a fonctionné. Parce qu'il a donné des captures d'écran appropriées une fois ou deux fois. Mais quelque chose s'est rompu à nouveau et maintenant, je continue à obtenir des fichiers vides. Maintenant, les dimensions diffèrent - parfois, il est 978x36 et parfois, il est 978x232 (en fonction du test réel étant invoqué), mais toujours 100% noire PNG. Aaah. Je pensais que ça est résolu.
J'ai vu un PNG noir une ou deux fois, mais la plupart du temps, cela fonctionne bien pour moi. Je ne cours pas comme service si ... J'espère que vous trouverez quelque chose qui fonctionne.
Je suis venu accrocher le problème avec CapturesCreenshot générant des images noires lors de l'exécution sous un service Windows. P>
Utilisation de capturerentIREPAGESCreenshot, comme recommandé par Dave Hunt, travaille systématiquement pour moi. P>
Malheureusement. J'ai vu des captures non-noires prises par CaptureTèleEpagesCreenshot () une seule fois. Juste après la commutation (au lieu de CapturesCreenshot ()). Mais depuis lors, ça ne marche pas.
On dirait qu'il y a une réponse complètement différente. Le service Windows (géré par tanukisoftware Java Service wrapper ) a été démarré avec Consultez le wrapper.ntservice.interactive Code> défini sur
false code>. Le réglage sur
true code> a aidé. Finalement, les captures d'écran contiennent du contenu réel. P>
wrapper.ntservice.interactive code >
pour plus de détails. L'analyse du code wrapper conduit à [ service_interactive_process code>] ( http://msdn.microsoft.com/en-us/library/ms683502 (vs.85) .aspx) drapeau étant défini lors du démarrage du service Windows. P>
Je ne sais pas comment le contrôle de la croisière exécutera des tests d'interface graphique, mais j'ai récemment mis en place un mécanisme de capture d'écran moi-même et ce que j'ai appris, c'est que les composants que vous dessinez Donc, si la commande de croisière ou si vos tests d'unité utilisent une magie pour ne pas afficher correctement les éléments d'interface graphique, vous voudrez peut-être les ajouter à un jframe factice avant de peindre. P>
Une solution alternative à votre approche d'exécution:
enfermez votre test dans un bloc d'essai et faites la capture d'écran dans le bloc de capture, c'est ce que je fais toujours. p>
Exemple de code Java:
public void testEnterFormFields() try { enterFormFields(); } catch(SeleniumException e) { //do screenshot, logging, dumping, stacktracing or whatever here } }
Comment répondit-il au problème des captures d'écran vierges?
De cette façon, vous prenez des captures d'écran avant de quitter la méthode de test -> avant que toutes les erreurs soient signalées et que des méthodes de démolition soient appelées qui détruiront l'instance du navigateur.