【发布时间】:2015-03-26 21:10:21
【问题描述】:
我需要通过 webdriver 控制 Firefox 浏览器。注意,我不是试图控制页面元素(即查找元素、单击、获取文本等);而是我需要访问 Firefox 的分析器并强制 gc(即我需要 Firefox 的 Chrome 授权和 sdk)。对于上下文,我正在创建一个微型基准测试框架,而不是运行普通的 webdriver 测试。
显然原始的 webdriver 不起作用,所以我一直在尝试做的是
1) 创建一个满足我需要的 Firefox 扩展/附加组件:即
var customActions = function() {
console.log('calling customActions.')
// I need to access chrome authority:
var {Cc,Ci,Cu} = require("chrome");
Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
Cu.forceGC();
var file = require('sdk/io/file');
// And do some writes:
var textWriter = file.open('a/local/path.txt', 'w');
textWriter.write('sample data');
textWriter.close();
console.log('called customActions.')
};
2) 将我的customActions 函数暴露给一个页面:
var mod = require("sdk/page-mod");
var data = require("sdk/self").data;
mod.PageMod({
include: ['*'],
contentScriptFile: data.url("myscript.js"),
onAttach: function(worker) {
worker.port.on('callCustomActions', function() {
customActions();
});
}
});
在myscript.js:
exportFunction(function() {
self.port.emit('callCustomActions');
}, unsafeWindow, {defineAs: "callCustomActions"});
3) 在我的 webdriver 测试期间加载 xpi,并调用全局函数 callCustomActions
关于这个过程的两个问题。
1) 这整个过程非常迂回。通过 webdriver 与 Firefox 扩展对话有更好的做法吗?
2) 我当前的解决方案效果不佳。如果我直接通过cfx run 运行我的扩展程序(没有webdriver),它会按预期工作。但是,通过 webdriver 运行时,sdk 和 chrome 权限都没有做任何事情。
顺便说一句,我知道我的函数被调用是因为日志行“调用 customActions”。和“称为customActions”。两者都打印。
也许有一些我需要设置但没有设置的 Firefox 首选项?
【问题讨论】:
标签: firefox selenium selenium-webdriver firefox-addon firefox-addon-sdk