我在Ubuntu 11.10上运行的Firefox 11上使用Selenium 1.7.2。直到昨天,我们还没有使用document.domain
javascript。我们需要将它添加到我们生成的HTML和我们的一个javascript文件中。
现在,当我们运行Selenium IDE Test Suite时,我们收到以下错误:
Error: Permission denied for <http://dev.example.com> to get property Location.href
dev.example.com
是我们的应用服务器(Glassfish 3.1.2落后于Apache + mod_jk)
如果我评论document.domain
一切正常(至少在Firefox中,因为document.domain是为了阻止IE阻止PIE.htc脚本... 叹息)
我尝试添加找到here的用户扩展程序脚本:
function setdom(str,doc,dom) {
doc.domain = dom;
}
Selenium.prototype.doDocumentDomain = function(domain) {
var lw;
setdom('ts',frames['testSuiteFrame'].document, domain);
setdom('tf', getTestFrame().contentWindow.document, domain);
setdom('my', frames['myiframe'].document, domain);
lw = LOG.getLogWindow();
if (lw) {
setdom('log', lw.document, domain);
}
setdom('doc', document, domain);
}
但这看起来很旧,可能不再兼容了。它在第一次调用setdom('ts',frames['testSuiteFrame'].document,domain);
行
我不是在HTTP和HTTPS之间来回浏览,我已经阅读了很多与StackOverflow和Google Group相关的问题,但没有结果。
我可以修改我们的代码,仅为IE包含document.domain
,但它不是很干净......
问题:如何在设置document.domain时使Selenium IDE无安全问题?或者我如何修复他在用户扩展之上以便在Selenium IDE 1.7.2中工作?谢谢。
答案 0 :(得分:0)
所以我决定更改Selenium javascript以允许我使用它来设置document.domain:
在第920行的chrome / content / selenium-core / scripts / selenium-browserbot.js中(版本1.7.2):
//Samit: Fix: open command sometimes fails if current url is chrome and new is not
windowObject = core.firefox.unwrap(windowObject);
// -------------- Start My Change ----------------
updateDomain(windowObject.document);
// -------------- End My Change ----------------
if (this._windowClosed(windowObject)) {
LOG.debug("pollForLoad WINDOW CLOSED (" + marker + ")");
delete this.pollingForLoad[marker];
return;
}
然后在user-extensions.js中:
var validDomain = null;
Selenium.prototype.doDocumentDomain = function(domain) {
validDomain = domain;
}
function updateDomain(doc) {
if(validDomain==null) {
return;
}
LOG.info("Current domain: " + doc.domain);
if(doc.domain != validDomain && (doc.domain+"").indexOf(validDomain)>0 ) {
doc.domain = validDomain;
}
LOG.info("New domain: " + doc.domain);
}
我在设置新域之前检查它是我想要设置的域的子域。我在Selenium IDE中使用它:
documentDomain | example.com
因此,当它打开dev.example.com和static.example.com时,它会在域中找到example.com
并替换域。