我正在尝试在 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
无论如何,karma
和 karma-firefox-launcher
已经在每次浏览器运行时为您完成了大部分自动化工作,所以我只是修补了该项目以添加支持将扩展放置在正确的位置并设置必要的首选项。我提交了一个 PR,它是 here .
关于javascript - 如何在功能测试 CI 环境中跨平台加载 Firefox 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661063/