作为公司产品的一部分,用户必须向浏览器添加书签(书签按钮执行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的书签关联的脚本的方法有两种:
- 创建一个班轮脚本并做出“公开”声明。它适用于Firefox浏览器版本11.0的 ,但在Firefox 23.0上导致非致命的 故障。当在Firefox 23.0上时,Selenium脚本 会暂停并等待窗口出现,忽略弹出框 。最终脚本在抛出错误后恢复。
- 编写自定义用户扩展,将根据要求执行脚本
我尝试以下三个扩展添加到硒的芯扩展(用户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();
有人能帮我找出我做错了吗?任何有用的建议,不胜感激。