我需要通过webdriver控制Firefox浏览器。注意,我没有尝试控制页面元素(即查找元素,单击,获取文本等);而我需要访问Firefox的分析器和强制gc(即我需要firefox的Chrome Authority和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。"和#34;称为customActions。"两者都打印。
也许有一些我需要设置的firefox偏好但是没有?
答案 0 :(得分:3)
可能您根本不需要加载项。 Mozilla使用Marionette来测试Firefox OS的自动化程度:
Marionette是Mozilla Gecko引擎的自动化驱动程序。它可以 远程控制Gecko的UI或内部JavaScript 平台,如Firefox或Firefox OS。它可以控制两者 chrome(即菜单和功能)或内容(加载的网页) 在浏览环境中),提供高水平的控制和 复制用户操作的能力。除了执行操作 在浏览器上,Marionette还可以读取属性和属性 DOM。
如果这听起来与Selenium / WebDriver类似,那么你是对的! Marionette拥有大部分相同的精神和API Selenium / WebDriver,带有与Gecko交互的附加命令 镀铬界面。它的目标是复制Selenium为网络所做的事情 content:使测试人员能够发送命令 远程控制用户代理。