基于C#程序的AJAX 自动化测试
昨天发了一个求助帖,也无人理会,只好自己动手丰衣足食了。
结合WatiN源码,和James McCaffrey 博士的 AJAX 测试自动化(http://msdn.microsoft.com/zh-cn/magazine/cc163479.aspx)一文终于搞定了,代码如下:
Code
private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
//
if (e.uRL.ToString().ToLower().IndexOf("网址.htm") > 0)
{
IHTMLDocument2 doc = (IHTMLDocument2)this.axWebBrowser1.Document;
if (doc != null)
{
mshtml.HTMLSelectElement sellanguage = (mshtml.HTMLSelectElement)doc.all.item("signup_language", null);
sel.value = "fr";
NameValueCollection collection = new NameValueCollection();
collection.Add("button", "1");
FireEvent((DispHTMLBaseElement)sel, "onchange", collection);
}
}
textBox1.Text = e.uRL.ToString();
}
public static void FireEvent(DispHTMLBaseElement element, string eventName, NameValueCollection eventObjectProperties)
{
StringBuilder scriptCode = new StringBuilder();
//1000为等待的时间
scriptCode.Append("window.setTimeout('action()', 1000);");
scriptCode.Append("function action(){");
scriptCode.Append("var newEvt = document.createEventObject();");
for (int index = 0; index < eventObjectProperties.Count; index++)
{
scriptCode.Append("newEvt.");
scriptCode.Append(eventObjectProperties.GetKey(index));
scriptCode.Append(" = ");
scriptCode.Append(eventObjectProperties.GetValues(index)[0]);
scriptCode.Append(";");
}
scriptCode.Append("document.getElementById('" + element.uniqueID + "').fireEvent('" + eventName + "', newEvt);");
scriptCode.Append("}");
try
{
IHTMLWindow2 window = ((IHTMLDocument2)element.document).parentWindow;
RunScript(scriptCode.ToString(), "javascript", window);
}
catch (Exception RunScriptException)
{
}
}
public static void RunScript(string scriptCode, string language, IHTMLWindow2 window)
{
try
{
window.execScript(scriptCode, language);
}
catch (Exception ex)
{
throw ex;
}
}
private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
//
if (e.uRL.ToString().ToLower().IndexOf("网址.htm") > 0)
{
IHTMLDocument2 doc = (IHTMLDocument2)this.axWebBrowser1.Document;
if (doc != null)
{
mshtml.HTMLSelectElement sellanguage = (mshtml.HTMLSelectElement)doc.all.item("signup_language", null);
sel.value = "fr";
NameValueCollection collection = new NameValueCollection();
collection.Add("button", "1");
FireEvent((DispHTMLBaseElement)sel, "onchange", collection);
}
}
textBox1.Text = e.uRL.ToString();
}
public static void FireEvent(DispHTMLBaseElement element, string eventName, NameValueCollection eventObjectProperties)
{
StringBuilder scriptCode = new StringBuilder();
//1000为等待的时间
scriptCode.Append("window.setTimeout('action()', 1000);");
scriptCode.Append("function action(){");
scriptCode.Append("var newEvt = document.createEventObject();");
for (int index = 0; index < eventObjectProperties.Count; index++)
{
scriptCode.Append("newEvt.");
scriptCode.Append(eventObjectProperties.GetKey(index));
scriptCode.Append(" = ");
scriptCode.Append(eventObjectProperties.GetValues(index)[0]);
scriptCode.Append(";");
}
scriptCode.Append("document.getElementById('" + element.uniqueID + "').fireEvent('" + eventName + "', newEvt);");
scriptCode.Append("}");
try
{
IHTMLWindow2 window = ((IHTMLDocument2)element.document).parentWindow;
RunScript(scriptCode.ToString(), "javascript", window);
}
catch (Exception RunScriptException)
{
}
}
public static void RunScript(string scriptCode, string language, IHTMLWindow2 window)
{
try
{
window.execScript(scriptCode, language);
}
catch (Exception ex)
{
throw ex;
}
}
2008年8月14日