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