通过webdriver控制firefox的最佳方法

时间:2015-03-26 21:10:21

标签: firefox selenium selenium-webdriver firefox-addon firefox-addon-sdk

我需要通过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偏好但是没有?

1 个答案:

答案 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:使测试人员能够发送命令   远程控制用户代理。