2013-08-19 24 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(); 

我希望帮助:-)