您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 >
使用.net開發(fā)Web自動(dòng)化測(cè)試工具
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/21 14:06:28 ] 推薦標(biāo)簽:

  前段時(shí)間,由于測(cè)試需要,使用C#結(jié)合WatiN組件,開發(fā)了一個(gè)小小的web自動(dòng)化測(cè)試工具。

  WatiN 是一個(gè)非常簡(jiǎn)單靈活的測(cè)試框架,可以模擬用戶在客戶端瀏覽器中的大部份操作,API也比較簡(jiǎn)單。

  一、實(shí)現(xiàn)url調(diào)用和web控件的控制很簡(jiǎn)單,參考下面代碼:

  請(qǐng) 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])) //調(diào)用URL,txtUrls[i]為Url地址

  {

  ie.AddDialogHandler(dh);//增加一個(gè)控制句柄

  ie.CheckBox("cblSets_6").Checked = false;

  ie.CheckBox("cblSets_8").Checked = true;

  ie.Button("btnSave").ClickNoWait(); //執(zhí)行保存

  ie.RemoveDialogHandler(dh);

  ie.Close();

  }

  }

  catch (Exception e)

  {

  sb.Append("Execute Err:").Append(txtUrls[i]).Append(";");

  }

  }

  二、WatiN 里常用的類

  WatiN.Core.Find

  普遍使用的類是Find類的,它是一個(gè)工廠類,主要使用它的靜態(tài)方法來(lái)實(shí)現(xiàn)一些查詢條件。比如像上面的例子中的這個(gè)語(yǔ)句“ie.Button(Find.ByName("btnG")).Click();”調(diào)用了Find的靜態(tài)方法ByName來(lái)查詢一個(gè)name屬性為指定值的HTML元素,然后再調(diào)用IE對(duì)象的Button方法把這個(gè)元素轉(zhuǎn)換為按鈕對(duì)象。

  WatiN.Core.IE

  這應(yīng)該是關(guān)鍵的類了。他常用的方法是和屬性為

  屬性

  HtmlDialogs 返回當(dāng)前對(duì)象用JavaScript打開的模式窗口(需然幫助文檔中說(shuō)非模式窗口也包括在內(nèi),但在試用中發(fā)現(xiàn)用window.open打開的窗口沒(méi)有被)

  Frames 返回當(dāng)前的象里的所有Frames

  方法

  靜態(tài)方法 AttachToIE 與一個(gè)已經(jīng)找開的IE關(guān)連。

  Button,TextField,Image,Div 等一系列方法。與Find對(duì)象共同使用用于返回IE中特定的按鈕,輸入框,等HTML元素。

  三、應(yīng)用中的一些技巧

  1、如何去捕獲一個(gè)新彈出的窗口。

  背景:有些鏈接是從一個(gè)新彈出的窗口中打開的,我如果關(guān)連上這類型的窗口。

  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();//這個(gè)方法改成這樣,那點(diǎn)擊后不會(huì)等代碼IE完成了。

  //下面這句是處理登陸的技巧所在,系統(tǒng)打開了另一個(gè)窗口。

  //下面這句是用正則表達(dá)式捕獲這個(gè)窗口。

  ie = IE.AttachToIE(Find.ByTitle(new WatiN.Core.Comparers.RegexComparer(new System.Text.RegularExpressions.Regex(".*自動(dòng)化測(cè)試.*"))));

  ie.WaitForComplete();

  MainFrame. = ie.Frame(Find.ByName("MainFrame_00001"));

  MenuFrame. = ie.Frame(Find.ById("leftMenu"));//把系統(tǒng)里的Frame先保存下來(lái)。

  }

  2、對(duì)于alert 、confirm 等javascript彈出的窗口的捕獲。

  背景:一個(gè)系統(tǒng)經(jīng)常會(huì)使用以上這些javascript來(lái)彈出一些提示信息,如果捕獲這些窗口,并模擬用戶點(diǎn)擊這些窗口上的OK或Cancel按鈕?

  方案:其實(shí)WatiN在默認(rèn)情況下,都會(huì)自動(dòng)地去點(diǎn)擊這些彈出式窗口上的Cancel按鈕的,但如果用戶要明確點(diǎn)擊哪些事件的話可以對(duì)IE對(duì)象增加一個(gè)“查看器”()

  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();//把原來(lái)的Click改成這個(gè)方法。

  dh.WaitUntilExists(3);//等待彈出窗口的出來(lái)。多等三秒。

  dh.OKButton.Click();//點(diǎn)擊這個(gè)窗口的OK按鈕

  ie.RemoveDialogHandler(dh);

  doc.Button(Find.ByName("btn_close")).Click();

  }

  3、關(guān)于用JS彈出的Modal窗口(模式窗口)的處理。

  背景:有些地方需要彈出模式窗口來(lái)處理數(shù)據(jù)。

  方解:當(dāng)點(diǎn)擊了彈出模式窗口的按鈕或連接后馬上用IE對(duì)像的HtmlDialogs屬生來(lái)獲取模式窗口。

  protected void f()

  {

  //假設(shè)下面這行代碼會(huì)彈出一個(gè)模式窗口把原來(lái)的Click改成這個(gè)方法。

  //記住這里要用ClickNoWait而不能用Click,否則在模式窗口關(guān)閉之前代碼不會(huì)繼續(xù)執(zhí)行。

  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();

  WatiN 官方網(wǎng)址:http://watin.sourceforge.net/可以在上面下載組件。

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd