2010-12-16 229 views
6

J'ai fait des recherches depuis un moment et je suis dans une impasse. Je fais de l'automatisation IE. En C# /. NET, comment puis-je rechercher et consommer une alerte javascript() ou confirmer() afin que je puisse faire des choses comme saisir son texte et cliquer sur les boutons OK \ Annuler?Sonde C# et capture Javascript Alert() et Confirmer()

Mise à jour:

Je dois réitérer: Je dois être en mesure de tirer et de vérifier le texte d'une alerte() ou confirmer(), ainsi que l'envoyer un OK ou Annuler clic. Un exemple d'un tel test serait de s'assurer que, lorsque je clique sur supprimer, la confirmation() ne dit pas "Es-tu sûr que tu aimerais aller au Mexique?" ou toute autre chose sauf le bon message. Permettez-moi de réitérer: Pour les besoins de ce test, j'ai zéro contrôle sur la source du site en question.

Enfin, j'utilise SHDocVw.InternetExplorer.

+0

Utilisez-vous IE ou créez-vous une application personnalisée avec un contrôle WebBrowser? – zsalzbank

+0

Par "sonde pour" manipulez-vous le pré-navigateur source ou seulement après son affichage? Êtes-vous au service de vous-même? Est-il possible d'avoir ces choses utiliser des boîtes de dialogue modales au lieu de boîtes d'alerte et le gérer en javascript? – jcolebrand

+0

Possible dupe de http://stackoverflow.com/questions/77659/blocking-dialogs-in-net-webbrowser-control – Zach

Répondre

1

FindWindow - vous permettra de vous rapprocher; vous voulez une poignée de fenêtre, mais vous ne saurez pas comment le trouver.

Mieux vaut utiliser EnumWindows.Voici un exemple d'une routine que vous pouvez exécuter toutes les secondes ou deux qui vous donnera une tonne d'informations sur chaque fenêtre sur le système, alors vous pouvez l'analyser. Vous pouvez vérifier le type de fenêtre, le texte qui s'y trouve, obtenir les boutons et envoyer un clic sur le bon. Cela vous permettra de faire tout ce que vous espérez pouvoir faire.

Pour obtenir le texte, vous envoyez un wm_gettext et pour le bouton, vous pouvez vous en sortir avec wm_click.

Désolé pour le C. le prochain meilleur exemple que j'ai pu trouver était dans LISP. Prenez le temps de lire le code, vous verrez quelle est l'idée. Les fonctions Correspondance permettent de déterminer si le texte est correct sans le savoir exactement.

Si vous parvenez à faire cela en C# je parie que vous aurez une solution beaucoup plus courte. (Vous pouvez utiliser LINQ sur la sortie de EnumWindows? ;-)

#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 
#include "resource.h" 

#define ET_STARTUP 1 
#define ET_WIN