隨筆-6  評(píng)論-38  文章-40  trackbacks-0
          ?

          1.在javascript中,可以用三種方式來模擬多線程。
          a)在javascript中用command模式模擬多線程
          b)window.setTimeout(code,time)
          讓代碼在指定時(shí)間后執(zhí)行一次。
          c)setInterval(code,time)
          讓代碼按照指定時(shí)間間隔來執(zhí)行。

          注意setTimeout與setInterval的區(qū)別

          2.似乎無法在javascript的單線程執(zhí)行環(huán)境中利用AutoItX來捕捉onload事件中的alert。
          背景:selenium中采用了重載window.alert的方式,來截獲所有javascript中的alert。
          Window.alert = function (msg) {
          This.Alerted.push(msg);
          };
          這樣,所有的alert消息被悄無聲息地存放在一個(gè)隊(duì)列中。原本的alert彈出后,如果不點(diǎn)擊OK或者關(guān)閉,整個(gè)javascript執(zhí)行線程就一直停止。重載window.alert的方式避免彈出alert窗口,保證了selenium順利地執(zhí)行。
          但是,這種方式無法捕捉body的onload事件中的alert。因?yàn)槊恳淮嗡⑿马撁娴臅r(shí)候,所有的被重載的方法和事件都會(huì)被清空,而我們來不及再一次重載alert方法。
          使用Watir的時(shí)候,我注意到了她是借助一個(gè)名為AutoItX庫來實(shí)現(xiàn)這個(gè)功能的。于是,設(shè)想是否可以通過同樣的方法來捕捉onload事件中的alert方法。
          我不詳細(xì)介紹AutoItX類庫,簡要說一下她的原理:
          var autoit = new ActiveXObject(“AutoItX3.Control”);
          autoit.WinWait(title,text,…);//等待標(biāo)題為title,包含text的窗口出現(xiàn)

          開始的設(shè)想是使用如下的方法來不斷查詢alert窗口是否彈出:
          window.setTimeout(‘fuction check() {autoit.WinExists(title,txt) == 1?return:check()’,100)
          但是,卻無法捕捉到alert。原因就是alert彈出后,如果不點(diǎn)擊OK或者關(guān)閉,整個(gè)javascript執(zhí)行線程就會(huì)停止。所以,調(diào)用check函數(shù)的計(jì)時(shí)也停止了。這個(gè)問題用模擬多線程是無法解決的。

          對(duì)于這個(gè)問題的一個(gè)解決方案

          posted on 2006-12-02 08:11 一手的小窩窩 閱讀(1331) 評(píng)論(0)  編輯  收藏 所屬分類: JAVASCRIPT
          主站蜘蛛池模板: 右玉县| 曲靖市| 邵东县| 乐清市| 隆尧县| 上林县| 灵丘县| 衡阳市| 安岳县| 三穗县| 大姚县| 温泉县| 咸丰县| 舒城县| 乌海市| 乐清市| 东乌珠穆沁旗| 桐梓县| 罗源县| 罗城| 马边| 海盐县| 辛集市| 宾阳县| 乐东| 兰考县| 崇义县| 昭通市| 瑞昌市| 麻栗坡县| 马山县| 陕西省| 海兴县| 惠安县| 桂平市| 浦北县| 偃师市| 尤溪县| 天长市| 高淳县| 桦甸市|