javascript - 如何在功能测试 CI 环境中跨平台加载 Firefox 扩展?

标签 javascript firefox firefox-addon karma-runner functional-testing

我正在尝试在 Firefox 中对一些依赖于要加载的扩展的 JavaScript 代码运行功能测试。在 Chrome 中,我可以通过告诉浏览器启动器使用 --load-extension=<path> 启动 Chrome 来做到这一点。 。我没有在 Firefox 中找到类似的方法,也没有找到任何其他明确的方法来做到这一点。

我的第一次尝试是尝试使用 -profile <path> 启动具有自定义配置文件的 Firefox。命令行开关,但是当尝试对 firefox 配置文件扩展元数据进行逆向工程时,看起来其中有一些绝对路径会使配置文件不可移植(即我无法将其 checkin git 并让其他开发人员能够克隆并运行测试,因为它会寻找我机器的路径)。

有谁知道处理这个问题的好方法吗?如果每次运行测试时我不必被迫生成extensions.json,我真的很喜欢它。

就其值(value)而言,我正在使用 node.js 中的 karma 和 karma-firefox-launcher 运行功能测试

最佳答案

做了一些之后more research ,我找到了解决办法。您可以编写创建空目录(例如“tempProfile”)的脚本并创建以下内容:

tempProfile/prefs.js

user_pref("extensions.autoDisableScopes", 0);
user_pref("extensions.enabledScopes", 15);

tempProfile/extensions/

将您的扩展程序放置在此处。扩展程序的文件名必须与扩展程序的“id”完全匹配,并以 .xpi 作为其文件扩展名。您可以通过提取 .xpi(即 unzip XXX.xpi)并使用文本编辑器打开 install.RDF 文件来发现扩展的“id”。在 Description 标记下查找 em:id 标记。

例如,如果您的 install.RDF 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
   <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    <em:id>myCustomExt@suchandsuch</em:id>
    <em:version>1.0</em:version>
    <em:type>2</em:type>
    <em:bootstrap>true</em:bootstrap>
    <em:unpack>false</em:unpack>

    [...]
  </Description>
</RDF>

然后您应该将扩展程序的文件名设置为 myCustomExt@suchandsuch.xpi

完成配置文件设置后,您可以使用 Firefox -profile/path/to/tempProfile 运行 Firefox

无论如何,karmakarma-firefox-launcher 已经在每次浏览器运行时为您完成了大部分自动化工作,所以我只是修补了该项目以添加支持将扩展放置在正确的位置并设置必要的首选项。我提交了一个 PR,它是 here .

关于javascript - 如何在功能测试 CI 环境中跨平台加载 Firefox 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661063/

相关文章:

javascript - 如何在内联选项的 inputChanged 上使用 addEventListener

javascript - jQuery - 为什么警报动画不起作用?

javascript - Phonegap iOS 应用程序不允许在 iframe 中的表单上进行输入

javascript - React Router V4 无法正常工作

修复了 Firefox 中 jQuery 动画位置不准确的问题

javascript - 使用位于插件文件夹内的参数执行二进制文件

html - Firefox 无法识别背景大小 : cover with Cycle2 Slider injections

javascript - 使用 firefox webextension api 清除所有 cookie

javascript - 在 XUL <template> 中使用 JSON

javascript - 浏览器刷新不进行垃圾回收