2013-08-19 32 views
1

作爲公司產品的一部分,用戶必須向瀏覽器添加書籤(書籤按鈕執行JavaScript代碼,而不是打開URL)。書籤如下:需要在Selenium IDE中添加cutom用戶擴展

javascript: (function() { 
      var d = document; 
      var script = d.createElement('scr'+'ipt'); 
      script.src = 'https://<Company_URL>/Bookmarklet/ScriptContent?scriptFile=bm-script.js&rnd=' + Math.floor(Math.random() * 99999); 
      if (typeof script.onload === 'object') { 
       script.onload = function() { 
        doGeneralScript(); 
       }; 
      } 
      else { 
       script.onreadystatechange = function() { 
        if (this.readyState == 'complete' || this.readyState == 'loaded') { 
         doGeneralScript(); 
        } 
       }; 
      } 
      d.getElementsByTagName('head')[0].appendChild(script); 
      }()); 

代碼基本上打開與它的一些控制和用於用戶的下一個步驟是點擊控制中的一個的幀彈出。 同時,硒IDE是無法對位於公共區域外的按鈕點擊,所以有執行與硒IDE的書籤關聯的腳本的方法有兩種:

  1. 創建一個班輪腳本並做出「公開」聲明。它適用於Firefox瀏覽器版本11.0的 ,但在Firefox 23.0上導致非致命的 故障。當在Firefox 23.0上時,Selenium腳本 會暫停並等待窗口出現,忽略彈出框 。最終腳本在拋出錯誤後恢復。
  2. 編寫自定義用戶擴展,將根據要求執行腳本

我嘗試以下三個擴展添加到硒的芯擴展(用戶extensions.js)

Selenium.prototype.doMbProduction = function() 
    { 
     var d = document; 
     var script = d.createElement('scr' + 'ipt'); 
     script.src = 'https://<Company_URL>/Bookmarklet/ScriptContent?scriptFile=bm-script.js&rnd=' + Math.floor(Math.random() * 99999); 
     if (typeof script.onload === 'object') { 
      script.onload = this.doRunGeneralScript(); 
     } else { 
      script.onreadystatechange = this.doPerformLoad(); 
     } 
     d.getElementByTagName('head')[0].appendChild(script); 
    } 

    Selenium.prototype.doRunGeneralScript = function(){ 
     script.doGeneralScript(); 
    } 

    Selenium.prototype.doPerformLoad = function() 
    { 
if (this.readyState == 'complete' || this.readyState == 'loaded') { 
    this.doRunGeneralScript(); 
     } 
    } 

但是,將無法工作。當執行命令mbProduction,腳本引發致命錯誤

[error] Unexpected Exception: ReferenceError: script is not defined. fileName -> chrome://selenium-ide/content/tools.js -> file:///C:/Users/3pf/Downloads/sideflow1.js?1376849717650, lineNumber -> 124

在我的對自定義用戶的擴展線124 script.doGeneralScript();

有人能幫我找出我做錯了嗎?任何有用的建議,不勝感激。

回答

1

我遇到了同樣的問題。下面它幹了什麼對我來說,解決這個問題:

  1. 創建文件名「用戶extensions.js」的文件。
  2. 將此文件保存在您的網站的公共目錄內。
  3. 加載此文件在「選項」>「選項」>「硒的芯擴展(用戶extensions.js)」
  4. 重啓硒

你可能仍然得到彈出一個錯誤的腳本找不到,但事實並非如此 - 它應該起作用。

當您更新您的user-extensions.js文件時,您必須重啓 Selenium。選中「激活開發人員工具」複選框即可按下「重新加載」按鈕。這樣可以在不重新啓動Selenium的情況下重新加載腳本。

1

我希望我的迴應不算太晚。

首先,我看到了兩個問題。

1)錯誤信息看起來非常精確。如果你看一下你的代碼

Selenium.prototype.doRunGeneralScript = function(){ 
    script.doGeneralScript(); 
} 
  • 變量「腳本」存在doRunGenerateScript方法中沒有被定義。這將不起作用

2)您將不能直接訪問Selenuim對象內的文檔。要獲得「文檔」對象的持有,使用:

var document = this.browserbot.getDocument(); 

我希望幫助:-)