<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 193,  comments - 520,  trackbacks - 0
    Selenium目前沒有提供對IE模態對話框(即通過showModalDialog方法打開的彈出對話框)的處理。原因在于,模態對話框會將父頁面的JS掛起,直至對話框處理完畢才會繼續執行父頁面JS。因為Selenium的底層實現是基于JS的,所以模態對話框會同時將selenium掛起,selenium無法選中模態對話框,直至超時。

    但是很多系統往往有大量的模態對話框應用。這些應用分為兩類:一類是選人、選業務類型等操作,這些操作的目的是填充父頁面相應的字段,不會觸發其他操作;另外一類比較特殊,例如工作流的派發,這類操作在模態對話框選人返回值后還會繼續執行一系列的操作(即showModalDialog方法的調用被夾在一堆JS操作中間)。

    對于第一種情況,可以在測試代碼里建立相應的數據常量,通過直接賦值的方式避免調用showModalDialog方法;對于第二種情況,則只能hack。

    在當前的測試用例里,采用以下的hack方法:
    典型的模態對話框會在點擊一個頁面元素后打開(例如button),在第一次點擊該頁面元素時,我們對showModalDialog方法進行覆蓋,改打開模態對話框為window.open打開網頁,并將selenium選中該彈出網頁:

    public void clickAndSelectModalDialog(String locator){
        clickForModalDialog(locator);
         selenium.selectWindow(“name
    =modal”);
    }

    private void  clickForModalDialog(String locator){
        String overrideShowModalDialogJs
    =="if(selenium.browserbot.getCurrentWindow().showModalDialog){";

    overrideShowModalDialogJs 
    += "selenium.browserbot.getCurrentWindow().showModalDialog = function( sURL, vArguments, sFeatures)";

    overrideShowModalDialogJs 
    +="selenium.browserbot.getCurrentWindow().open(sURL, 'modal', sFeatures);";

    overrideShowModalDialogJs 
    += "};}";
    //showModalDialog方法進行覆蓋
    selenium.getEval(overrideShowModalDialogJs);
    selenium.click(locator);
    selenium.openWindow(“”,”modal”);
    selenium.waitForPopUp(“modal”,”
    15000”);

    }


    接下來就可以在彈出網頁里進行操作,獲取需要返回給父頁面的值,這些值一般是一個數組。獲取值后關閉彈出網頁并返回父頁面。在父頁面里再次點擊打開模態對話框的元素,對showModalDialog方法進行第二次覆蓋,將上面獲取的值直接返回。

    public void  acceptModalValue(String locator,String[] values){
        String overrideShowModalDialogJs
    =="if(selenium.browserbot.getCurrentWindow().showModalDialog){";

    overrideShowModalDialogJs 
    += "selenium.browserbot.getCurrentWindow().showModalDialog = function( sURL, vArguments, sFeatures)";

    overrideShowModalDialogJs 
    +=""+generateModalDialogReturnObject(values)+return temp”;

    overrideShowModalDialogJs 
    += "};}";
    //showModalDialog方法進行覆蓋
    selenium.getEval(overrideShowModalDialogJs);
    selenium.click(locator);
    }

    private void  generateModalDialogReturnObject (String[] values){
        StringBuffer returnObject
    =new StringBuffer();
        returnObject.append(“var temp
    =new Array();”);
        
    for(int i=0;i<values.length;i++){
            returnObject.append(“temp[”
    +i+”]=’”+values[i]+”’;”);
        }
        
    return returnObject.toString();
    }


    這樣就完成了整個過程。看一個示例,該示例打開一個選部門的模態對話框,從部門樹里選擇部門,然后返回:

    //點擊后彈出部門選擇框的圖片
    String depChooseLocator=”…/img”;
    //點擊并選中該彈出網頁
    clickAndSelectModalDialog(depChooseLocator);

    //執行部門樹的操作
    ….
    //獲取該對話框要返回給父頁面的值
    String name=selenium.getEval(“window.seltree.GetAllCheckText();”);
    String id
    =selenium.getEval(“window.seltree.GetAllNodeId();”);
    //關閉部門選擇對話框
    closeModalDialog();
    //返回父頁面
    Selenium.selectWindow(“name=main95598”);
    //組裝返回值
    String returnValues=new String[2];
    returnValues[
    0]=name;
    returnValues[
    1]=id;
    //父頁面獲取對話框返回值
    acceptModalValue(depChooseLocator, returnValues);


    可以進一步抽象為模板回調方法,略。




    http://www.tkk7.com/ronghao 榮浩原創,轉載請注明出處:)
    posted on 2009-07-27 21:17 ronghao 閱讀(3591) 評論(0)  編輯  收藏 所屬分類: 工作日志
    <2009年7月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩电影免费观看| 高清永久免费观看| 日本一区二区免费看| 亚洲成av人片在线天堂无| 亚洲av无码成人精品区一本二本 | 666精品国产精品亚洲| 伊人久久大香线蕉免费视频| 国产精品成人无码免费| 亚洲中文字幕无码av永久| 一本岛高清v不卡免费一三区| 中文字幕亚洲色图| 999久久久免费精品国产| 中文文字幕文字幕亚洲色| 啦啦啦中文在线观看电视剧免费版| 精品日韩亚洲AV无码| 中文字幕影片免费在线观看| 激情五月亚洲色图| 国产高清在线精品免费软件| 免费精品视频在线| 亚洲电影免费在线观看| 国产成人免费高清激情明星| 亚洲 欧洲 视频 伦小说| 俄罗斯极品美女毛片免费播放| 国产福利电影一区二区三区,免费久久久久久久精 | 114级毛片免费观看| 精品免费国产一区二区| 亚洲免费黄色网址| 精品国产免费观看久久久| 国产精品高清视亚洲一区二区| 性短视频在线观看免费不卡流畅 | 国产精品亚洲αv天堂无码| a级黄色毛片免费播放视频| 亚洲日本国产乱码va在线观看| 全免费a级毛片免费**视频 | 美女视频黄a视频全免费网站色 | 亚洲白嫩在线观看| 性xxxx视频播放免费| 美女被cao网站免费看在线看| 亚洲一区二区三区在线网站 | 久久精品国产亚洲AV无码偷窥| 成人免费看吃奶视频网站|