隨筆-6  評論-38  文章-40  trackbacks-0
          ?

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

          注意setTimeout與setInterval的區別

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

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

          對于這個問題的一個解決方案

          posted on 2006-12-02 08:11 一手的小窩窩 閱讀(1331) 評論(0)  編輯  收藏 所屬分類: JAVASCRIPT
          主站蜘蛛池模板: 呼伦贝尔市| 旌德县| 云和县| 阳朔县| 东乡县| 财经| 郑州市| 武义县| 固原市| 南安市| 南木林县| 衡山县| 库尔勒市| 襄樊市| 琼结县| 济源市| 安龙县| 永宁县| 深州市| 萝北县| 射洪县| 呈贡县| 江达县| 岳阳市| 英德市| 全南县| 垣曲县| 双江| 永寿县| 武定县| 邵武市| 繁峙县| 屯昌县| 龙山县| 黑河市| 宜昌市| 和硕县| 宝丰县| 奇台县| 鄂托克旗| 彭山县|