[C#] Message d'erreur dans un WebBrowser [Résolu]

Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 12 juin 2014 à 12:04 - Dernière réponse : Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention
- 15 juin 2014 à 18:51
Bonjour à tous, j'ai une form1 avec un webBrowser, un bouton, et des textbox pour remplir un formulaire, j'aimerais savoir comment je peux afficher ( dans un label ou autre ) quand tu erreur apparaît dans mon webBrowser, car celui-ci est masquer, exemple j'ai l'ID de l'erreur sur le prénom ( firstNameFieldError )



Si le champ Prénom est vide ou incorrect et que cet erreur ( firstNameFieldError ) apparaît sur mon webBrowser, j'aimerais qu'il apparaisse aussi dans ma form1 voilà je sais pas si j'ai étais assez clair ou pas x)



Merci d'avance ^^
Afficher la suite 

Votre réponse

66 réponses

jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 12 juin 2014 à 12:08
0
Merci
je sais pas si j'ai étais assez clair ou pas
Ou pas...


Mais comme j'ai déjà suivi quelques unes de tes questions je pense savoir de quoi tu parles...

Donc : Dans ta page internet, lorsque tu remplis ton nom d'utilisateur (par exemple) apparait dans cette page un message d'erreur ( par exemple : nom d'utilisateur déjà utilisé....).
Ce que tu souhaites... c'est récupérer ce message pour l'afficher dans ta form.

Pour ce faire :
Tu regardes le code HTML de ce message d'erreur.
Il est surement contenu dans un DIV ...
Tu récupère donc, via l' ID de ce div son contenu...




Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 12 juin 2014 à 12:17
Oui voilà tu as parfaitement compris ce que je voulais dire x)

L'ID de l'erreur je l'ai déjà c'est celle que j'ai citer plus haut mais c'est le code que je ne connais absolument pas :x

http://prntscr.com/3s1srh
Commenter la réponse de jordane45
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 12 juin 2014 à 13:01
0
Merci
Il faut que tu utilises innerHTML
https://developer.mozilla.org/fr/docs/DOM/element.innerHTML

//Contenu de la balise <label id="account_loginNameFieldError'"  ..></label>
variable = document.getElementByid('account_loginNameFieldError').innerHTML;

A adapter avec le nom de tes variaaables bien entendu.
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 12 juin 2014 à 13:24
J'ai mis ceci mais il ne reconnait pas innerHTML :(

HtmlDocument document10 = this.webBrowser1.Document;
label6 = document10.GetElementById("account_loginNameFieldError").innerHTML;

Erreur1'System.Windows.Forms.HtmlElement' ne contient pas une définition pour 'innerHTML' et aucune méthode d'extension 'innerHTML' acceptant un premier argument de type 'System.Windows.Forms.HtmlElement' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)C:\Users\xxxx\desktop\test\test\Form3.cs
Commenter la réponse de jordane45
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 12 juin 2014 à 13:27
0
Merci
Salut,

Tu peux utiliser le document HTML sous-jacent au WebBrowser:

// Récupère le document HTML
System.Windows.Forms.HtmlDocument doc =
        this.webBrowser1.Document;

// Pour un input
string valInput = doc.All["monInput"].GetAttribute("value");

//Pour un DIV :
string monDivText = doc.GetElementById("Mondiv").InnerText;
//ou 
string monDivText = doc.GetElementById("Mondiv").InnerHtml;


bye...
Commenter la réponse de yann_lo_san
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 12 juin 2014 à 14:48
0
Merci
Et bien entendu,

Que tu utilises "ma" méthode, ou celle proposée par Yan....
Il faut, pour ne pas avoir d'erreur, vérifier que l'élément dont tu essayes de récupérer le contenu EXISTE sur la page.
Si tu mets un nom d'utilisateur VALIDE et qu'il n'y a pas de message d'erreur sur ta page web... l'élement Label contenant l'erreur normalement... n'existe pas...
Il est donc normal que tu ne puisse y lire sa valeur....


En javascript, pour vérifier qu'un élement existe on utilise Typeof.
var monElement = document.getElementById('id_de_mon_element');
if(typeof(monElement)!='undefined'){

//

}



jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 01:10
;-)
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 13:49
Enfaite j'ai un problème, x)

Avec le code du coup quand message apparaît il s'affiche 3 fois x)

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement elmt = webBrowser1.Document.GetElementById("account_loginNameFieldError");
if (elmt != null)
{
string mavaleur = elmt.InnerHtml;
MessageBox.Show("Veuillez saisir une adresse mail", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 13:55
Comment ça 3 fois ?

Déjà.. je vois que tu as mis le code dans :
webBrowser1_DocumentCompleted(

Donc... il se déclenche à chaque fois que le document est chargé/rafraichi...
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 13:58
Quel rapidité :o

Bah si je le met dans le bouton envoyer il marche une fois de temps en temps enfaite, même si la case est vide il ne va pas l'envoyer :/
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 14:01

Bah si je le met dans le bouton envoyer il marche une fois de temps en temps enfaite, même si la case est vide il ne va pas l'envoyer :/

Si la case est vide : Ben comme sur le site il me semble... il ne t'affiche rien...
Au pire..pour la case Vide tu fais le test toi même sur ta textbox....

Pour ce qui est du.. une fois de temps en temps....
C'est qu'il y a peut être un moment de latence sur le site....(le temps qu'il fasse la vérification.)
A la rigueur... tu ajoutes une petite temporisation avant de faire la vérification...
Commenter la réponse de jordane45
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 14:06
0
Merci
Si justement il doit m'afficher le message si la case est vide, c'est bien pour ça que j'ai voulu ce code ^^

Quand je lance le formulaire avec toutes les cases vides, j'ai une case visible du webBrowser, et on la voit bouger donc le message d'erreur apparaît bien sur la page mais pas dans mon tool et si je reclique pour lancer le formulaire, là j'aurais les messages d'erreur, par contre la date de naissance est entrer correctement et il m'affiche quand même tout les messages, par contre si le nom est entrer et que le reste non, là il n'affiche aucune erreur nul part.

Sa ne viendrais pas de mon code par hasard ?

HtmlElement elmt = webBrowser1.Document.GetElementById("account_loginNameFieldError");
if (elmt != null)
{
string mavaleur = elmt.InnerHtml;
MessageBox.Show("Veuillez saisir une adresse mail", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
HtmlElement elmt1 = webBrowser1.Document.GetElementById("dropDownGroupError");
if (elmt != null)
{
string mavaleur = elmt1.InnerHtml;
MessageBox.Show("Veuillez saisir une date de naissance", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

etc pour les autres erreurs c'est la même chose
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 14:11
Si ... ça vient de ton code !

  HtmlElement elmt1 = webBrowser1.Document.GetElementById("dropDownGroupError");
            if (elmt != null)

elmt => n'est pas elmt1
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 14:13
Aie l'erreur bête de ma part j'avais pas vu ! :o
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 14:13
Je vais tester ça tout de suite !
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 14:15
Après test ça na rien changer enfaite x)

J'ai toujours les mêmes erreurs :x
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 14:16
Sa serait pas la disposition du code ? ça prend la méthode if donc il prend le 1er et si le premier " if " est activer il ne regarde pas les autres ?
Commenter la réponse de Ulrichleboss
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 14:19
0
Merci
J'ai toujours les mêmes erreurs :x

Qu'est ce que tu entends par : les mêmes erreurs ?

As-tu essayé de mettre des points d'arrêt dans ton programme pour essayer de comprendre pourquoi ça te faisait ça ?
Qu'est ce déclenche ces erreurs ?

Je te rappelle également que la plus part des scripts présents sur ta page html... se déclenchent après changement de FOCUS des éléments....


Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 14:28
Même après avoir changer les nom des elmt, j'ai toujours la même chose si la 1er erreur ne s'affiche pas, les autres erreurs ne s'afficheront pas, je ne pense pas que les script joue un rôle là dessus puisque sur la page webBrowser les erreurs s'affichent correctement, mais pas sur mon tool, des points d'arrêts kézako ?

Je me demande si c'est pas en rapport avec le code, ça pourrait correspondre :

Il ne m'affiche pas les erreurs si il n'y à pas d'erreur dans la première case, et si il m'affiche la 1er erreur, il va m'afficher les autres erreurs même si il n'y en à pas sur la page.

Le ''if'' ne serait il pas la cause de mon problème ?
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 14:38
Tu peux me montrer le code exact entier ?
Commenter la réponse de jordane45
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 14:55
0
Merci
Yep le voilà

private void metroButton2_Click(object sender, EventArgs e)
{
HtmlElement elmt = webBrowser1.Document.GetElementById("account_loginNameFieldError");
if (elmt != null)
{
string mavaleur = elmt.InnerHtml;
MessageBox.Show("Veuillez saisir une adresse mail", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
HtmlElement elmt1 = webBrowser1.Document.GetElementById("dropDownGroupError");
if (elmt1 != null)
{
string mavaleur = elmt1.InnerHtml;
MessageBox.Show("Veuillez saisir une date de naissance", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
HtmlElement elmt2 = webBrowser1.Document.GetElementById("confirmPasswordFieldError");
if (elmt2 != null)
{
string mavaleur = elmt2.InnerHtml;
MessageBox.Show("Veuillez confirmez le mot de passe", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
HtmlElement elmt3 = webBrowser1.Document.GetElementById("recaptcha_response_fieldFieldError");
if (elmt3 != null)
{
string mavaleur = elmt3.InnerHtml;
MessageBox.Show("Veuillez saisir les caractères affichés sur l'image.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

HtmlDocument document7 = this.webBrowser1.Document; document7.GetElementById("confirmPasswordField").SetAttribute("value", textBox1.Text);
HtmlDocument document5 = this.webBrowser1.Document; document5.GetElementById("recaptcha_response_field").SetAttribute("value", textBox2.Text);
HtmlDocument doc = this.webBrowser1.Document;
object[] args = { textBox1.Text, "account_password" };
doc.InvokeScript("validatePasswordAJAX", args);
webBrowser1.Document.GetElementById("createAccountButton").InvokeMember("click");
}
Commenter la réponse de Ulrichleboss
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - Modifié par jordane45 le 13/06/2014 à 15:42
0
Merci
Tiens...

J'ai fais un peu de ménage...

Dis moi ce que ça donne :

private void metroButton2_Click(object sender, EventArgs e)
        {
            
   // DOcument HTML (on ne le déclare qu'une fois..ça suffit...
   HtmlDocument docHTML  = this.webBrowser1.Document;
   
   // Récupération des différents élements de la page:
   HtmlElement elmt  = docHTML.GetElementById("account_loginNameFieldError");
   HtmlElement elmt1 = docHTML.GetElementById("dropDownGroupError");
   HtmlElement elmt2 = docHTML.GetElementById("confirmPasswordFieldError");
   HtmlElement elmt3 = docHTML.GetElementById("recaptcha_response_fieldFieldError");

     if (elmt != null){
               MessageBox.Show("Veuillez saisir une adresse mail", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
           
            if (elmt1 != null){
               MessageBox.Show("Veuillez saisir une date de naissance", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
          
            if (elmt2 != null){
               MessageBox.Show("Veuillez confirmez le mot de passe", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
            if (elmt3 != null){
              MessageBox.Show("Veuillez saisir les caractères affichés sur l'image.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

   docHTML.GetElementById("confirmPasswordField").SetAttribute("value", textBox1.Text);
   docHTML.GetElementById("recaptcha_response_field").SetAttribute("value", textBox2.Text);
           
             object[] args = { textBox1.Text, "account_password" };
             docHTML.InvokeScript("validatePasswordAJAX", args);
   
   // Si aucun élément ne manque :
   if   (elmt != null 
     && elmt1 != null 
     && elmt2 != null 
     && elmt3 != null){
                docHTML.GetElementById("createAccountButton").InvokeMember("click");
   }
        }


Edit : correction : retrait des " .Document" en trop dans la déclaration des variables.


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 15:39
Ca c'est peut être mon IF de la fin.
   // Si aucun élément ne manque :
   if   (elmt != null 
     && elmt1 != null 
     && elmt2 != null 
     && elmt3 != null){
                docHTML.GetElementById("createAccountButton").InvokeMember("click");
   }

si tu le retires et que tu ne gardes que :
    docHTML.GetElementById("createAccountButton").InvokeMember("click");

ça donne quoi ?
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 15:40
Ah oui...
J'ai du modifier le code en enlevant le mot " Document " sur cette partie du code
Bien vu... erreur de copier coller
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 15:58
Si j'enlève le If de la fin il me demande de mettre un " ; " à la fin de
(elmt != null 
&& elmt1 != null
&& elmt2 != null
&& elmt3 != null)

Si je le fais il me sors cette erreur : http://prntscr.com/3sec9g
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 16:06
C'est par ce que tu as oublié de retirer un "}"
EDIT : Quand je dis retirer le IF .. c'est TOUT le bloc de test...
pas que le mot "if" ^^

Testes ce code :

private void metroButton2_Click(object sender, EventArgs e)
        {
            
   // DOcument HTML (on ne le déclare qu'une fois..ça suffit...
   HtmlDocument docHTML  = this.webBrowser1.Document;
   
   // Récupération des différents élements de la page:
   HtmlElement elmt  = docHTML.GetElementById("account_loginNameFieldError");
   HtmlElement elmt1 = docHTML.GetElementById("dropDownGroupError");
   HtmlElement elmt2 = docHTML.GetElementById("confirmPasswordFieldError");
   HtmlElement elmt3 = docHTML.GetElementById("recaptcha_response_fieldFieldError");

     if (elmt != null){
               MessageBox.Show("Veuillez saisir une adresse mail", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
           
            if (elmt1 != null){
               MessageBox.Show("Veuillez saisir une date de naissance", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
          
            if (elmt2 != null){
               MessageBox.Show("Veuillez confirmez le mot de passe", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
            if (elmt3 != null){
              MessageBox.Show("Veuillez saisir les caractères affichés sur l'image.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

   docHTML.GetElementById("confirmPasswordField").SetAttribute("value", textBox1.Text);
   docHTML.GetElementById("recaptcha_response_field").SetAttribute("value", textBox2.Text);
           
             object[] args = { textBox1.Text, "account_password" };
             docHTML.InvokeScript("validatePasswordAJAX", args);
 // Si aucun élément ne manque :
 //  if   (elmt != null 
 //    && elmt1 != null 
 //     && elmt2 != null 
 //     && elmt3 != null){
                docHTML.GetElementById("createAccountButton").InvokeMember("click");
   //}
 }

Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 16:20
Ah d'accord x) Je viens d'essayer et ça change un peu le fonctionnement, toujours les mêmes événements, je clique, pas d'erreurs sur la form, quand je re-clique sur le bouton il me sort les erreurs, en rapport avec les cases qui sont vides cette fois, mais toujours pas du premier coup par contre :x
Commenter la réponse de jordane45
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 16:33
0
Merci
Je pense qu'il faut invoker le script de password...avant de vérifier.


private void metroButton2_Click(object sender, EventArgs e)
        {
 
//-------------------------------------------
// Initialisation de l'élément : Document
//-------------------------------------------           
   // Document HTML (on ne le déclare qu'une fois..ça suffit...
   HtmlDocument docHTML  = this.webBrowser1.Document;
   
//-------------------------------------------
// Mise à jour des champs :
//-------------------------------------------
   docHTML.GetElementById("confirmPasswordField").SetAttribute("value", textBox1.Text);
   docHTML.GetElementById("recaptcha_response_field").SetAttribute("value", textBox2.Text);
     object[] args = { textBox1.Text, "account_password" };
      docHTML.InvokeScript("validatePasswordAJAX", args);

//-------------------------------------------
// Vérification du message(s) d'erreur(s)
//-------------------------------------------
   // Récupération des différents élements de la page:
   HtmlElement elmt  = docHTML.GetElementById("account_loginNameFieldError");
   HtmlElement elmt1 = docHTML.GetElementById("dropDownGroupError");
   HtmlElement elmt2 = docHTML.GetElementById("confirmPasswordFieldError");
   HtmlElement elmt3 = docHTML.GetElementById("recaptcha_response_fieldFieldError");

     if (elmt != null){
               MessageBox.Show("Veuillez saisir une adresse mail", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
           
            if (elmt1 != null){
               MessageBox.Show("Veuillez saisir une date de naissance", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
          
            if (elmt2 != null){
               MessageBox.Show("Veuillez confirmez le mot de passe", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            
            if (elmt3 != null){
              MessageBox.Show("Veuillez saisir les caractères affichés sur l'image.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

//-------------------------------------------
// Click sur le bouton Valider dans le navigateur
//-------------------------------------------
           
 // Si aucun élément ne manque :
 //  if   (elmt != null 
 //    && elmt1 != null 
 //     && elmt2 != null 
 //     && elmt3 != null){
 
          docHTML.GetElementById("createAccountButton").InvokeMember("click");

 //}
 }


Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 17:15
J'ai tester ça na rien changer apparemment l'ordre du script n'a pas d'importance
Commenter la réponse de jordane45
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - Modifié par jordane45 le 13/06/2014 à 17:28
0
Merci
Bon,
Déjà... pour éviter d'avoir a réécrire 50 fois le même code... j'ai ajouté une fonction qui fait la vérification des champs.

      public bool IsExistHtmlElement(string elmID) 
        {
            bool result = false;
            HtmlDocument docHTML = this.webBrowser1.Document;
            HtmlElement elmt = docHTML.GetElementById(elmID);
            if (elmt != null)
            {
                result = true;
            }
            return result;
        }

        private void button2_Click(object sender, EventArgs e)
        {

            bool isError = false;
            //-------------------------------------------
            // Initialisation de l'élément : Document
            //-------------------------------------------           
            HtmlDocument docHTML = this.webBrowser1.Document;

            //-------------------------------------------
            // Mise à jour des champs :
            //-------------------------------------------
            docHTML.GetElementById("confirmPasswordField").SetAttribute("value", textBox1.Text);
            docHTML.GetElementById("recaptcha_response_field").SetAttribute("value", textBox2.Text);
            object[] args = { textBox1.Text, "account_password" };
            docHTML.InvokeScript("validatePasswordAJAX", args);

            //-------------------------------------------
            // Vérification du message(s) d'erreur(s)
            //-------------------------------------------
            if (IsExistHtmlElement("account_loginNameFieldError"))
            {
                MessageBox.Show("Veuillez saisir une adresse mail", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                isError = true;
            }
            if (IsExistHtmlElement("dropDownGroupError"))
            {
                MessageBox.Show("Veuillez saisir une date de naissance", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                isError = true;
            }
            if (IsExistHtmlElement("confirmPasswordFieldError"))
            {
                MessageBox.Show("Veuillez confirmez le mot de passe", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                isError = true;
            }
            if (IsExistHtmlElement("recaptcha_response_fieldFieldError"))
            {
                MessageBox.Show("Veuillez saisir les caractères affichés sur l'image.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                isError = true;
            }

            //-------------------------------------------
            // Click sur le bouton Valider dans le navigateur
            //-------------------------------------------

            if (! isError)
            {
                MessageBox.Show("Veuillez saisir les caractères affichés sur l'image.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                docHTML.GetElementById("createAccountButton").InvokeMember("click");
            }
            else
            {
                MessageBox.Show("Il y a une ou plusieurs erreurs", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }



Pour ce qui est de ton souci..... => L'affichage des messages d'erreur qui ne se fait que si tu cliques une deuxième fois sur le bouton.....il faut qu'on creuse un peu plus...




Si tu mets un point d'arrêt sur la ligne de code :
 bool isError = false;

Est ce que lorsque ton script arrive sur ce point d'arrêt... les messages d'erreur DANS TON NAVIGATEUR sont présents ?


mets un autre point d'arrêt sur la ligne de code :
   if (! isError)

Et là ... est ce que les messages d'erreurs dans ton navigateur sont là ?


Et enfin... une fois que le code a fini de s'exécuter...
Est-ce que les messages d'erreurs DANS TON NAVIGATEUR toujours.. apparaissent ??


Et... as tu des MsgBox qui s'affichent ?


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 17:49
Alors, avec le code complet que tu ma donner, quand j'ouvre le programme, et que je clique sur Envoyer ( tout les champs sont vides à la base ), il m'affiche un messagebox me disant de remplir le captcha, quand je regarde le webBrowser, il me dit que tout les champs à part le captcha que j'ai remplis, sont vides, mais il ne m'affiche aucun autre messagebox. Et le message s'affiche dès le 1er clique et non plus au bout du deuxième.
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 18:02
Donc c'est bon ou pas ?
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 18:06
Non :x le message s'affiche alors que le captcha est remplis, et aucun autre messages ne s'affiche alors que tout les autres champs sont vides :s
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 18:15
Est ce que tu as regardé dans le code source de la page web si ces éléments sont présents dans la PAGE même si les champs ne sont pas remplis ??
Pas si il y a un message dedans...mais bien si le "conteneur" existe ?
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 18:26
Je viens de regarder et le conteneur n'existe pas :x le code est manquant , il n'apparaît que quand il y'a l'erreur :x
Commenter la réponse de jordane45
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 18:34
0
Merci
Tu peux tester ceci ?


public bool IsExistHtmlElement(string elmID) 
        {
            bool result = false;
            HtmlDocument docHTML = this.webBrowser1.Document;
            HtmlElement elmt = docHTML.GetElementById(elmID);
            if (elmt != null)
            {
                result = true;
 MessageBox.Show("L'élément "+ elmID + existe et contient : " + elmt.innerHTML , "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
            

            }
            return result;
        }





Et .... as tu essayé en mode pas à pas après avoir mis les points d'arrêt comme je te l'ai demandé ??

jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 22:57
Non ce n'est pas ça. .
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 23:09
Ah
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 23:14
J'ai une fenêtre avec marquer "Sortie" est y'avais marquer ça dedans
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 13 juin 2014 à 23:50
Quand tu cliques sur ton bouton il ne te marque rien d'autre ?
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 13 juin 2014 à 23:55
Non :x
Commenter la réponse de jordane45
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 14 juin 2014 à 03:35
0
Merci
Reprenons....

Peux tu me dire si tu as mis des points d'arrêt et si tu as testé ton code en mode pas à pas ?
http://loulou.developpez.com/tutoriels/cpp/debogueur-visual-studio/#L3.3

Pour ce qui est de la sortie (output).
N'as tu pas dans cette feneêtre une liste déroulante du genre :



Pour ce qui est de ton souci.... il faudrait peut être regarder du côté de la temporisation.
en effet...(Sur le site) entre le moment où tu cliques sur le bouton valider du site et celui où apparaissent les messages (sur un autre lien).. il peut y avoir quelques millisecondes (voir quelques secondes...)

J'aimerai aussi que tu m'expliques pourquoi tu as deux boutons et à quoi ils servent (et comment tu t'en serts..)

D'après ce que je crois comprendre :
Le bouton 1 te sert à renseigner TOUS les champs
Puis "cliques" sur le bouton valider.

Le bouton 2 : Vérifie s'il y a des messages d'erreur puis s'il n'y en a pas ..."cliques" sur valider ?
Donc tu te trouves bien sur la page contenant les erreurs AVANT de cliquer sur le bouton 2 ?




Autre point :
Autant.. pour certaines vérifications faites par le site tel que le captcha et le login ( vérifications faites via des scripts javascript sur la page) je comprend que tu veuilles récupérer les erreurs de la page....
Autant pour les autres champs je ne comprend pas que tu ne fasses pas la vérification toi-même directement dans ton programme....
La case est vide ? ...erreur il faut la renseigner..... et ça.. nul besoin d'aller demander au site web de te le dire.....

Penses que là... tu es en train de manipuler un logiciel (internet explorer) à travers TON programme.... et donc...ça alourdit forcément les choses..

Pour faire une analogie :
C'est un peu comme moi qui suit en train de te dire comment modifier ton programme.... il risque d'y avoir des loupés à un moment où à un autre et ça sera plus lent... (plus que si c'était moi qui codait directement)...

Donc pour résumer :
Tout ce qui peut être traité directement par TON programme doit l'être...et tu réserves les manipulation du site web à ce qui est indispensable.

Dans le principe :
1 - Tu fais remplir par tes utilisateurs les champs (tes textbox)

2 - Tu vérifies que tous les champs obligatoires sont bien remplis

3 - si oui... tu cliques sur le bouton valider du site web
3 bis - Sinon.. retour étape 1

4 - Tu attends que la page soit rechargée...

5 - Tu vérifie s'il y a des messages d'erreur

6 - Si il y a des erreurs : Retour à l'étape 1
6 bis - Sinon ...ben... ton compte est créé..



Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 14 juin 2014 à 10:36
Bonjour à toi !

Alors points d'arrêts je ne sais pas ou les placer précisement, et quand je lance le programme en pas à pas visual studio plante, la fenêtre d'output sortie la voilà : http://prntscr.com/3snqao et comme je te l'ai dit plus haut y'a marquer ce genre de chose, pour les champs qui sont vides c'est vrai qu'il serait bien plus de le faire faire par le programme et non pas par le webbrowser, je vais me pencher à des corrections pour ça !

Mon bouton 1 me permet de préremplir des champs en voici le code :
HtmlDocument document1 = this.webBrowser1.Document; document1.GetElementById("account_loginNameFieldInput").SetAttribute("value", richTextBox1.Text);
HtmlDocument document2 = this.webBrowser1.Document; document2.GetElementById("dayDropDown").SetAttribute("value", comboBox1.Text = "1");
HtmlDocument document3 = this.webBrowser1.Document; document3.GetElementById("monthDropDown").SetAttribute("value", comboBox2.Text = "1");
HtmlDocument document4 = this.webBrowser1.Document; document4.GetElementById("yearDropDown").SetAttribute("value", comboBox3.Text = "1950");

Et mon bouton 2 me permet de valider le password, invoquer le javascript et confirmer le captcha, plus cliquer le bouton d'envoie de la page.

J'ai un 3ème bouton mais lui fonctionne de la même façon que le 1er, sauf qu'au lieu de préremplir avec des mot déjà prêt, il permet de mettre les mot que l'on veux dans une textbox puis de les envoyer vers le formulaire : Textbox remplis par utilisateur + le captcha et javascript + envoie :

HtmlDocument document1 = this.webBrowser1.Document; document1.GetElementById("account_loginNameFieldInput").SetAttribute("value", richTextBox1.Text);
HtmlDocument document2 = this.webBrowser1.Document; document2.GetElementById("dayDropDown").SetAttribute("value", comboBox1.Text);
HtmlDocument document3 = this.webBrowser1.Document; document3.GetElementById("monthDropDown").SetAttribute("value", comboBox2.Text);
HtmlDocument document4 = this.webBrowser1.Document; document4.GetElementById("yearDropDown").SetAttribute("value", comboBox3.Text);
HtmlDocument document7 = this.webBrowser1.Document; document7.GetElementById("confirmPasswordField").SetAttribute("value", textBox1.Text);
HtmlDocument document5 = this.webBrowser1.Document; document5.GetElementById("recaptcha_response_field").SetAttribute("value", textBox2.Text);
HtmlDocument doc = this.webBrowser1.Document;
object[] args = { textBox1.Text, "account_password" };
doc.InvokeScript("validatePasswordAJAX", args);
webBrowser1.Document.GetElementById("createAccountButton").InvokeMember("click");
Commenter la réponse de jordane45
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 14 juin 2014 à 11:02
0
Merci
J'ai modifié le code :

private void metroButton2_Click(object sender, EventArgs e)
{
{
//-------------------------------------------
// Initialisation de l'élément : Document
//-------------------------------------------
HtmlDocument docHTML = this.webBrowser1.Document;
//-------------------------------------------
// Mise à jour des champs :
//-------------------------------------------
docHTML.GetElementById("confirmPasswordField").SetAttribute("value", textBox1.Text);
docHTML.GetElementById("recaptcha_response_field").SetAttribute("value", textBox2.Text);
object[] args = { textBox1.Text, "account_password"};
docHTML.InvokeScript("validatePasswordAJAX", args);

if (richTextBox1.Text.Trim() == "")
{
MessageBox.Show("Veuillez saisir une adresse mail.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (comboBox1.Text.Trim() == "Jour")
{
MessageBox.Show("Veuillez saisir le jour de votre date de naissance.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (comboBox2.Text.Trim() == "Mois")
{
MessageBox.Show("Veuillez saisir le mois de votre date de naissance.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (comboBox3.Text.Trim() == "Année")
{
MessageBox.Show("Veuillez saisir l'année de votre date de naissance.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (textBox1.Text.Trim() == "")
{
MessageBox.Show("Veuillez confirmer le mot de passe.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
if (textBox2.Text.Trim() == "")
{
MessageBox.Show("Veuillez saisir le CAPTCHA.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

//-------------------------------------------
// Click sur le bouton Valider dans le navigateur
//-------------------------------------------

if (richTextBox1 != null
&& comboBox1 != null
&& comboBox2 != null
&& comboBox3 != null
&& textBox1 != null
&& textBox2 != null)
{
docHTML.GetElementById("createAccountButton").InvokeMember("click");
}
}
}

Ca fonctionne mais y'a un truc qui me gêne ça devrais pas cliquer sur le bouton "createAccountButton" si y'a un champs qui est vide non ? pourtant dans mon cas ça le fais.
jordane45 22053 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 15 août 2018 Dernière intervention - 15 juin 2014 à 00:45
C'est ton IF qui ne va pas.
 if (richTextBox1 != null
                        && comboBox1 != null
                        && comboBox2 != null
                        && comboBox3 != null
                        && textBox1 != null
                        && textBox2 != null)
                {

Tes objets ( textbox..combo..) ne sont pas NULL... par contre leurs valeurs sont "vides"

Ca devrait être mieux comme ça :
 if (richTextBox1.Text <>""
                        && comboBox1.Text<>""
                        && comboBox2.Text<>""
                        && comboBox3.Text<>""
                        && textBox1.Text<>""
                        && textBox2.Text<>"")
                {
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 15 juin 2014 à 10:03
Euh non enfaite la j'ai 21 erreurs x), je vais essayer de changer le code pour enlever les erreurs

http://prntscr.com/3sz5m3
Ulrichleboss 511 Messages postés dimanche 20 juillet 2008Date d'inscription 14 mai 2016 Dernière intervention - 15 juin 2014 à 18:51
En adaptant le code j'ai réussi ^^

Merci à toi sujet clos !!!
Commenter la réponse de Ulrichleboss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.