您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源功能測(cè)試工具 >
Web 測(cè)試實(shí)踐 for .Net ?WatiN
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/12/5 13:51:43 ] 推薦標(biāo)簽:

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è)“查看器”()

//錯(cuò)誤事例
        protected void f()
        {
            WatiN.Core.DialogHandlers.ConfirmDialogHandler dh = new WatiN.Core.DialogHandlers.ConfirmDialogHandler();

            ie.AddDialogHandler(dh);//這句增加了一個(gè)控制器
            /**/
            /*
                 假設(shè)yzp_dic_btn_cls這個(gè)按鈕的onclick事件會(huì)用JS彈出一個(gè)Confirm窗口。
                 錯(cuò)誤,測(cè)會(huì)在這里彈出一個(gè)窗口,然后等待用戶進(jìn)行操作(隨便點(diǎn)擊一個(gè)按鈕才繼續(xù)執(zhí)行)
                 然后因?yàn)橛脩粢呀?jīng)點(diǎn)擊了按鈕關(guān)閉 彈出窗口。下一句的dh.WaitUntilExists(3);將會(huì)超時(shí),拋出異常
                 */
            doc.Button(Find.ByName("yzp_dic_btn_cls")).Click();
            dh.WaitUntilExists(3);//等待彈出窗口的出來(lái)。多等三秒。
            dh.OKButton.Click();//點(diǎn)擊這個(gè)窗口的OK按鈕
            ie.RemoveDialogHandler(dh);
            doc.Button(Find.ByName("btn_close")).Click();
        }

正確的示例應(yīng)該是:

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

總結(jié)

這個(gè)框架還是比較簡(jiǎn)單,主要要主意的事情是HTML元素的Click與ClickNoWait方法的區(qū)別。還有對(duì)于輸入框,是直接設(shè)置它的Value還是調(diào)用TypeText或AppendText方法模擬用戶手工輸入內(nèi)容。前者不會(huì)激發(fā)該控件的任何JS事件,而后者會(huì)激KeyDown、KeyUP等事件。

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