12
votes

Selenium exécuté en tant que service Windows pour prendre des captures d'écran sur les erreurs

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 .

Le sélénium.CapturesCreenshot () est appelé pour déclencher la capture d'écran réelle. J'ai enregistré un junit Runlistener pour l'appeler sur tout échec de test.

Le problème est que les captures d'écran ne sont que fichiers vierges - les fichiers PNG totalement noirs. Les dimensions sont 1440x900.

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.

Comment puis-je avoir les captures d'écran des pages prises lorsque des exceptions dans les tests de sélénium se produisent?

Le logiciel utilisé:

  • Server Windows 2003
  • SELENIUM 1.0.1

0 commentaires

7 Réponses :


0
votes

Voici quelques codes pour prendre des photos à l'aide de SELENIUM et de la classe de robot Java: xxx

il est extrait de ce site


6 commentaires

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.



2
votes

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.

Ce fil sur Services sur les forums Java.net Peut fournir les indices dont vous avez besoin pour le faire fonctionner.


1 commentaires

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é.



3
votes

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.

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.


3 commentaires

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.



1
votes

Je suis venu accrocher le problème avec CapturesCreenshot générant des images noires lors de l'exécution sous un service Windows.

Utilisation de capturerentIREPAGESCreenshot, comme recommandé par Dave Hunt, travaille systématiquement pour moi.


1 commentaires

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.



5
votes

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 wrapper.ntservice.interactive défini sur false . Le réglage sur true a aidé. Finalement, les captures d'écran contiennent du contenu réel.

Consultez le wrapper.ntservice.interactive pour plus de détails. L'analyse du code wrapper conduit à [ service_interactive_process ] ( http://msdn.microsoft.com/en-us/library/ms683502 (vs.85) .aspx) drapeau étant défini lors du démarrage du service Windows.


0 commentaires

0
votes

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 doivent être dans une fenêtre ou un autre élément racinaire. Les éléments "non manifestés" ne paient tout simplement pas correctement et entraîneront la plupart du temps des images noires.

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.


0 commentaires

-1
votes

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
  }
}


2 commentaires

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.