GetElementsByTagName fallisce quando chiamata 2 volte

di il
2 risposte

GetElementsByTagName fallisce quando chiamata 2 volte

Buongiorno a tutti,
Sto sviluppando un'applicazione per popolare e validare una pagina web in modo automatico.
La pagina è composta da un paio drop-down, un paio di bottoni e un campo per immettere del testo.
Il mio programma seleziona un'opzione da una drop-down, immette dei valori nei campi appropriati, e poi fa il submit della pagina per inviare i dati al server.

Il codice che sto usando è il seguente:

namespace Web_Browser_Manipulation
{
    public partial class Form1 : Form
    {
        AutoResetEvent waitHandle = new AutoResetEvent(false);        
            
        public Form1()
        {
            InitializeComponent();           
        }

        public void ie_DocumentComplete(object pDisp, ref object URL)
        {
            InternetExplorer ie = pDisp as InternetExplorer;
            ie.DocumentComplete -= ie_DocumentComplete;
            waitHandle.Set();
        }

        private int FindLineIndex(string Bestowal_Code, string Game_Code)
        {
            //funzione di supporto per trovare l'indice delle "option"; codice ininfluente ai fini della soluzione del mio problema ed omesso per chiarezza
        }

        private void UploadSignature(string Nome_SW, string Codice_SW, string Codice_Conc, string Codice_Gioco)
        { 
            ShellWindows SW = new ShellWindows();
            foreach (InternetExplorer ie in SW)
            {
                if (ie.LocationURL.Contains("aams"))
                {
                    int index = FindLineIndex(Codice_Conc, Codice_Gioco);
                    ie.DocumentComplete += ie_DocumentComplete;

                    try
                    {
                        if (index != -1)
                        {
                            var output = ie.Document.GetElementsByTagName("option"); //questa linea genera un'eccezione HRESULT 0x800A138A
                            ie.Document.GetElementsByTagName("option")[index].SetAttribute("selected", "true");
                            ie.Document.GetElementsByTagName("input")["aggiungi"].Click();

                            ie.Document.GetElementById("num").SetAttribute("value", "1");
                            ie.Document.GetElementsByTagName("input")["prepara"].Click();
                            ie.Document.GetElementById("nome_sftw1").SetAttribute("value", Nome_SW);
                            ie.Document.GetElementById("cod_sha11").SetAttribute("value", Codice_SW);
                            ie.Document.GetElementsByTagName("input")["Acquisisci"].Click();
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.ToString());
                    }
                    
                }
            }
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            UploadSignature("Nome1", "1234567890123456789012345678901234567890", "15023", "1");
            waitHandle.WaitOne();
            UploadSignature("Nome2", "1234567890123456789012345678901234567891", "15023", "2");
            waitHandle.WaitOne();
        }
    }
}
Questo codice funziona perfettamente la prima volta che la funzone "UploadSignature" viene chiamata, mentre fallisce alla riga indicata quando la funzojne viene chiamata la seconda volta.
Non riesco a capire perchè!
Qualche suggerimento?...
Grazie

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte