【问题标题】:Best way to control firefox via webdriver通过 webdriver 控制 Firefox 的最佳方法
【发布时间】: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


    【解决方案1】:

    您可能根本不需要该插件。 Mozilla 使用 Marionette 来测试 Firefox OS 的自动化等:

    Marionette 是 Mozilla 的 Gecko 引擎的自动化驱动程序。它可以 远程控制 Gecko 的 UI 或内部 JavaScript 平台,例如 Firefox 或 Firefox OS。它可以同时控制 chrome(即菜单和功能)或内容(加载的网页 在浏览上下文中),提供高级别的控制和 复制用户操作的能力。除了执行动作 在浏览器上,Marionette 还可以读取属性和属性 DOM。

    如果这听起来与 Selenium/WebDriver 相似,那么您是对的! Marionette 与 Marionette 有许多相同的精神和 API Selenium/WebDriver,带有与 Gecko 交互的附加命令 镀铬界面。它的目标是复制 Selenium 为 web 所做的事情 内容:使测试人员能够发送命令到 远程控制用户代理。

    【讨论】:

    • 感谢您的回答!但是,无论如何让 Marionette 与 Webdriver 一起工作(当我阅读时似乎并不这样,但只是检查一下)。我需要它来使用 webdriver 而不是另一个类似 webdriver 的服务器/客户端的原因是因为我需要的解决方案不仅适用于 firefox,而且适用于 Chrome/mobile/其他平台,并且开始不同是不切实际的不同浏览器的服务器。
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2017-08-16
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多