IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Exception lors du debogage [Débutant]


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Exception lors du debogage
    Bonjour,

    Je souhaiterais me connecter sur une page web via un webBrowser..
    J'ai d'on fait un groupBox contenant deux textBox et un bouton login.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    	// bouton connexion
    	private void btn_connect_Click(object sender, EventArgs e)
            {
                wb_viewer.Navigate("http://monsite.com/login/");
     
            }
            // WebBrowser
            private void wb_viewer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (wb_viewer.Document != null)
                {
                    txt_login.Text = null;
                    HtmlDocument doc = wb_viewer.Document;
                    HtmlElement elem = doc.GetElementById("login_field");
                    HtmlElement elem2 = doc.GetElementById("password_field");
                    HtmlElement elem3 = doc.GetElementById("btn_logon");
     
                    elem.SetAttribute("value", txt_login.Text);
                    elem2.SetAttribute("value", txt_psw.Text);
                    elem3.InvokeMember("click");
     
                    doc.Body.AppendChild(elem);
                    wb_viewer.Navigate("http://monsite.com/mypage.php");
                    gb_list.Visible = true;
                }
            }
    Mais lorsque je passe le Débogage, l'appli va essayer de se connecter pour finir sur une exception
    L'exception NullreferenceException n'a pas été géré par le code utilisateur
    En m'indiquant cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("value", txt_login.Text);
    Comment faire?
    Merci d'avance.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Bonsoir!

    En débuggant, regarde lequel entre "txt_login" "ou "elem" est null.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    elem s'affiche en vert, le reste de la ligne en jaune.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elem.SetAttribute("value", txt_login.Text);

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Met le curseur sur "elem" pour voir si c'est bien lui qui est null. Si oui, cela veut dire que doc.GetElementById("login_field"); renvoie null.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Il est bien null, comment puis je passer ce problème?

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Peux-tu nous afficher le code de la page html que tu essayes de parser?

    L'évènement DocumentCompleted est appelé quand un WebBrowser a fini de charger un document. J'imagine que tu as une première page où tu remplis ton login et ton password, puis tu peux naviguer sur d'autres pages web. Mais pour chaque page que tu chargeras, ta méthode sera appelée. Si la page est chargée correctement, wb_viewer.Document sera différent de null et rentrera dans ton if. Et tu vas essayer à chaque fois de trouver le "login_field" ou "password_field".

    Ais-je bien deviné ce que tu veux faire? Si non, explique moi un peu plus en détail ce que tu souhaites faire.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Alors oui j'ai une page de connexion que j'appelle en cliquant sur le bouton de connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void btn_connect_Click(object sender, EventArgs e)
            {
                wb_viewer.Navigate("http://monsite.com/login/");
     
            }
    Ensuite le WebBrowser intervient, affiche la page de de connexion, ou celle ci contient 2 textBox et un bouton ( identifiant, password et le bouton )

    Donc mon appli contient deux groupBox une à gauche contenant les informations à remplir et une à droite contenant le WebBrowser.

    Lorsque je clique sur mon bouton de connexion de l'application, je souhaiterais que celui ci entre les informations de mon compte utilisateur du site et passe à la page suivante.
    qui est celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb_viewer.Navigate("http://monsite.com/mypage.php");
    aucune erreur dans le codage de base, l'application va bien charger la page de connexion quand on appui sur le bouton, entré les informations identifiant et mot de passe, cliquer sur le bouton logon du site..
    l'application va commencer à passer à la page suivante... "mypage.php" commence à charger et l'erreur apparait.

    mais lorsque j'essaye l'application depuis le dossier de ou celle ci est enregistrer, l'erreur n'est pas la mais l'application ne prends pas en compte les données de connexion.

    Donc il faudrait que l'application garde les infos de connexion en mémoire et que je puisse naviguer d'une page à l'autre en gardant mes identifiants.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Ok c'est bien ce que je pensais.

    A mon avis, au moment où ta page "mypage.php" se charge, ta méthode "wb_viewer_DocumentCompleted" est appelée. Elle va donc analyser la nouvelle page qui ne contient aucun élément de connexion (textBox et bouton).

    Il faudrait que tu ajoutes une nouvelle condition, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    // Ce booléen ne se trouve pas dans ta méthode, mais en variable de classe ou globale
    bool connexion = true;
     
    if (wb_viewer.Document != null && connexion)
    {
                    txt_login.Text = null;
                    HtmlDocument doc = wb_viewer.Document;
                    HtmlElement elem = doc.GetElementById("login_field");
                    HtmlElement elem2 = doc.GetElementById("password_field");
                    HtmlElement elem3 = doc.GetElementById("btn_logon");
     
                    elem.SetAttribute("value", txt_login.Text);
                    elem2.SetAttribute("value", txt_psw.Text);
                    elem3.InvokeMember("click");
     
                    doc.Body.AppendChild(elem);
     
     
    // Si ta page s'est correctement chargée, tu passes ton bool à false.
    // Et il faut mettre le connexion à false avant d'appeler la méthode Navigate, // sinon tu sera dans le meme cas que précédement.
    connexion = false;
     
                    wb_viewer.Navigate("http://monsite.com/mypage.php");
                    gb_list.Visible = true;
    }
    Tu peux utiliser autre chose qu'un booléen pour tester que la page actuelle n'est pas la page de connexion.

    Si tu ne comprends pas mon idée, hésite pas à me redemander.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    J'ai effectuer quelques modifications, cela semble fonctionner. un avis?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    // Bouton de connexion
            private void btn_connect_Click(object sender, EventArgs e)
            {
                wb_viewer.Navigate("http://monsite.com/login.php");
            }
            // WebBrowser
            bool connexion = true;
            private void wb_viewer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (wb_viewer.Document != null && connexion)
                {
                    wb_viewer.Document.GetElementById("login_field").SetAttribute("value", txt_login.Text);
                    wb_viewer.Document.GetElementById("password_field").SetAttribute("value", txt_psw.Text);
                    wb_viewer.Document.GetElementById("btn_logon").InvokeMember("click");
     
                    connexion = false;
                    // Redirection direct vers la page d’accueil des utilisateurs enregistrer
                    // Affichage d'une groupBox
                    gb_list.Visible = true;
                }
                }
            // bouton de deconnexion du site
            private void btn_disconnect_Click(object sender, EventArgs e)
            {
                    wb_viewer.Navigate("http://monsite.com/logoff.php");
            }
            // bouton pour acceder à la page perso
            private void btn_mypage_Click(object sender, EventArgs e)
            {
                wb_viewer.Navigate("http://monsite.com/mypage.php");
            }
            }

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Cela fonctionnera la première fois que tu voudras te connecter. Si tu te déconnectes puis te reconnecte, "connexion" sera toujours à false et cela ne fonctionnera plus.

    Il faut détecter que tu es actuellement sur la page de connexion pour pouvoir atteindre le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                    wb_viewer.Document.GetElementById("login_field").SetAttribute("value", txt_login.Text);
                    wb_viewer.Document.GetElementById("password_field").SetAttribute("value", txt_psw.Text);
                    wb_viewer.Document.GetElementById("btn_logon").InvokeMember("click");
     
                    connexion = false;
                    // Redirection direct vers la page d'acceuil des utilisateurs enregistrer
                    // Affichage d'une groupBox
                    gb_list.Visible = true;
    La solution utilisant un booléen n'est peut être pas la meilleure...

    On pourrait plutôt faire un test sur la propriété "Url" du "wb_viewer.Document" pour déterminer si la page en cours est la page de connexion, et ainsi le test deviendrait qqch du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (wb_viewer.Document != null && wb.Document.Url == "http://monsite.com/login.php")
    {
    //...
    }
    Et ne plus utiliser le bool, ce qui me semble plus juste.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    j'ai essayer avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (wb_viewer.Document != null || wb_viewer.Document.Url.ToString() == "http://monsite.com/login.php")
                {
                  .....
                }
    car je ne pouvais utiliser "==" seul ( il y avait une erreur )
    mais la j'en reviens avec la même erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb_viewer.Document.GetElementById("login_field").SetAttribute("value", txt_login.Text);
    exception non géré

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Toujours une NullReferenceException? Ca plante au premier coup? avant le login? après? Il faut nous donner un peu plus de détails pour que l'on puisse t'aider.

    Utilises-tu le débuggeur? Si tu mets un point d'arrêt au niveau de la ligne qui plante tu peux voir quelle le contenu de variables, sinon tu peux ajouter un espion.

    Tu devrais décomposer cette grande ligne en 2 ou 3, comme tu avais fait au début afin de voir à quel moment ça plante.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Alors, toujours aucune erreur sur le code lui même, mais lorsque j'utilise le déboguage.

    code reformer pour la partie qui plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    private void wb_viewer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (wb_viewer.Document != null || wb_viewer.Document.Url.ToString() == "http://monsite.com/login.php")
                {
                    HtmlDocument doc = wb_viewer.Document;
     
                    HtmlElement elem = doc.GetElementById("login_field");
                    elem.SetAttribute("value", txt_login.Text);
     
                    // wb_viewer.Document.GetElementById("login_field").SetAttribute("value", txt_login.Text);
                    wb_viewer.Document.GetElementById("password_field").SetAttribute("value", txt_psw.Text);
                    wb_viewer.Document.GetElementById("btn_logon").InvokeMember("click");
     
                    // Redirection direct vers la page d'accueil des utilisateurs enregistrer
                    // Affichage d'une groupBox
                    gb_list.Visible = true;
                }
                }
    à nouveau la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elem.SetAttribute("value", txt_login.Text);
    Elem est null.

    edit :

    le plantage arrive comme au début, j'entre dans les textBox mes identifiants, je clique sur le bouton "connect" et l'erreur apparait un peu avant le passage à la page suivante.

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    J'avais pas vu! ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (wb_viewer.Document != null || wb_viewer.Document.Url.ToString() == "http://monsite.com/login.php")
    Une fois que tu as validé ta page de connexion, cela change de page. "wb_viewer.Document" est bien différent de null, et donc on entre dans le contenu du if.

    Il suffit de remplacer le || par && dans la condition , comme ça on ne rentrera dans le code de la condition que si le document n'est pas null ET la page est différente de celle indiquée.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    le problème avec l'opérateur && c'est que... rien ne se passe au débogage =/
    pas même l'insertion des mes infos dans les textBox de la page web.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (wb_viewer.Document != null && wb_viewer.Document.Url == "http://monsite.com/login.php")
    erreur :
    L'opérateur '==' ne peut pas être appliqué aux opérandes de type 'System.Uri' et 'String'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (wb_viewer.Document != null && wb_viewer.Document.Url.ToString() == "http://monsite.com/login.php")
    Aucune erreur de codage mais rien ne se passe au debogage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (wb_viewer.Document != null || wb_viewer.Document.Url.ToString() == "http://monsite.com/login.php")
    Aucune erreur de codage, au debogage, insertion de mes identifiants, et erreur NullReferenceException.

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 69
    Points : 93
    Points
    93
    Par défaut
    Ajoute des parenthèses pour bien séparer chaque condition (par sûr que ça soit la solution) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (wb_viewer.Document != null && (wb_viewer.Document.Url.ToString() == "http://monsite.com/login.php"))
    Et met un point d'arrêt (ou un espion) sur cette ligne pendant que tu débugges pour voir la valeur de "wb_viewer.Document.Url.ToString()", s'il n'y a pas un caractère différent (majuscule/minuscule...)

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Voila, donc le code fonctionne correctement ainsi. Merci pour ton aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
            // bouton de connexion.
            private void btn_login_Click(object sender, EventArgs e)
            {
                wb_viewer.Navigate("http://monsite.com/login/");
     
            }
     
            private void wb_viewer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                // Ajout de la condition if et vérification de la page de connexion
                if (wb_viewer.Document != null && (wb_viewer.Document.Url.ToString() == "http://monsite.com/login/"))
                {
     
                    HtmlDocument doc = wb_viewer.Document;
     
                    HtmlElement elem = doc.GetElementById("login_field");
                    elem.SetAttribute("value", txt_login.Text);
     
                    HtmlElement elem2 = doc.GetElementById("password_field");
                    elem2.SetAttribute("value", txt_psw.Text);
     
                    HtmlElement elem3 = doc.GetElementById("btn_logon");
                    elem3.InvokeMember("click");
                }
     
            }
            // Ajout du bouton de déconnexion
            private void btn_logout_Click(object sender, EventArgs e)
            {
                wb_viewer.Navigate("http://monsite.com/logoff.php");
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2007] Erreur lors de debogage class library "exception nullreference"
    Par djo_matrix dans le forum SharePoint
    Réponses: 1
    Dernier message: 21/05/2009, 16h57
  2. Réponses: 4
    Dernier message: 06/09/2005, 09h58
  3. Réponses: 9
    Dernier message: 31/05/2005, 10h05
  4. [Exception]Lors d'un validate sur un jframe
    Par cameleon2002 dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 02/05/2005, 11h27
  5. [JDBC] SQL Exception lors d'une Query !
    Par Castagnems dans le forum JDBC
    Réponses: 5
    Dernier message: 30/04/2004, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo