前不久,因为检测*须,应用C#融合WatiN部件,开发设计了一个小小web自动化技术检测工具。
WatiN 是一个比较简单灵便的检测架构,能够仿真模拟客户在手机客户端电脑浏览器中的绝大部分实际操作,API也非常简单。
一、完成url启用和web控制的操纵非常简单,参照下边编码:
请 for (int i = 0; i < txtUrls.Length; i )
{
try
{
WatiN.Core.DialogHandlers.AlertDialogHandler dh = new WatiN.Core.DialogHandlers.AlertDialogHandler();
using (IE ie = new IE(txtUrls[i])) //启用URL,txtUrls[i]为Url详细地址
{
ie.AddDialogHandler(dh);//提升一个操纵返回值
ie.CheckBox("cblSets_6").Checked = false;
ie.CheckBox("cblSets_8").Checked = true;
ie.Button("btnSave").ClickNoWait(); //实行储存
ie.RemoveDialogHandler(dh);
ie.Close();
}
}
catch (Exception e)
{
sb.Append("Execute Err:").Append(txtUrls[i]).Append(";");
}
}
二、WatiN 里常见的类
WatiN.Core.Find
最广泛应用的类便是Find类的,它是一个加工厂类,关键应用它的静态方法来完成一些查询条件。例如像上边的事例中的这一句子“ie.Button(Find.ByName("btnG")).Click();”就启用了Find的静态方法 ByName来查看一个name特性为特定值的HTML原素,随后再启用IE目标的Button方式 把这个原素变换为按键目标。
WatiN.Core.IE
这应该是最重要的类了。他常见的方式 是和特性为
特性
HtmlDialogs 回到当今目标用JavaScript开启的方式对话框(需然帮助文件上说非方式对话框也包含以内,但在使用中发觉用window.open开启的对话框沒有被)
Frames 回到当今的象里的全部Frames
方式
静态方法 AttachToIE 与一个早已找开的IE关联。
Button,TextField,Image,Div 等一系列方式 。与Find目标一同应用用以回到IE中特殊的按键,文本框,等HTML原素
三、运用中的一些方法
1、如何去捕捉一个新弹出来的对话框。
情况:有一些连接是以一个新弹出来的对话框中开启的,我假如关联上这种类的对话框。
public void Login(string uid, string passwd)
{
string url = Host "frmlogon.aspx";
ie = new IE();
ie.GoTo(url);
ie.WaitForComplete();
ie.TextField(Find.ById("txtUserName")).Value = uid;
ie.TextField(Find.ById("txtPwd")).Value = passwd;
ie.Button(Find.ById("btnLogin")).ClickNoWait();//这一方式 改为那样,那点一下后就不容易等编码IE完成了。
//下边这句话便是解决登录的方法所属,系统软件打开了另一个对话框。
//下边这句话便是用正则表达式捕捉这一对话框。
ie = IE.AttachToIE(Find.ByTitle(new WatiN.Core.Comparers.RegexComparer(new System.Text.RegularExpressions.Regex(".*功能测试.*"))));
ie.WaitForComplete();
MainFrame. = ie.Frame(Find.ByName("MainFrame_00001"));
MenuFrame. = ie.Frame(Find.ById("leftMenu"));//把系统软件里的Frame先储存出来。
}
2、针对alert 、confirm 等javascript弹出来的对话框的捕捉。
情况:一个系统软件常常会应用之上这种javascript来弹出来一些信息提示,假如捕捉这种对话框,并仿真模拟客户点一下这种对话框上的OK或Cancel按键?
计划方案:实际上WatiN在默认设置状况下,都是会全自动地去点一下这种弹出式窗口上的Cancel按键的,但假如客户要确立点一下什么事情得话能够对IE目标提升一个“查看器”()
protected void f()
{
WatiN.Core.DialogHandlers.ConfirmDialogHandler dh = new WatiN.Core.DialogHandlers.ConfirmDialogHandler();
ie.AddDialogHandler(dh);
doc.Button(Find.ByName("yzp_dic_btn_cls")).ClickNoWait();//把原先的Click改为这一方式 。
dh.WaitUntilExists(3);//等候弹出对话框的出去。数最多等三秒。
dh.OKButton.Click();//点一下这一对话框的OK按键
ie.RemoveDialogHandler(dh);
doc.Button(Find.ByName("btn_close")).Click();
}
3、有关用JS弹出来的Modal对话框(方式对话框)的解决。
情况:有一些地区*须弹出来方式对话框来解决数据信息。
方解:当点一下了弹出来方式对话框的按键或联接后立刻用IE对像的HtmlDialogs属天生获得方式对话框。
protected void f()
{
//假定下边这行编码会弹出来一个方式对话框把原先的Click改为这一方式 。
//记牢这儿得用ClickNoWait而不能用Click,不然在方式对话框关掉以前编码不容易执行。
ie.Button(Find.ByName("yzp_dic_btn_cls")).ClickNoWait();
ie.HtmlDialogs[ie.HtmlDialogs.Length - 1].TextField(Find.ByName("Q")).Value = "Hello";
ie.HtmlDialogs[ie.HtmlDialogs.Length - 1].Button(Find.ByName("btn_query")).Click();