2009/4/14 skier.tp <skier2701@gmail.com>
请见 CPAN 上的 XUL::App 模块的文档:
http://search.cpan.org/perldoc?XUL::App
文档中有一个小 PPT 介绍一个 hello world 的示例。更复杂的带 JS 的示例请见 demo 目录下的插件实例:
http://svn.openfoundry.org/xulapp/trunk/demo/
其中最简单的一个示例是所谓的 TextHunter 插件,批量地逐一加载指定的 URL 列表,然后 dump 出其 document.body.textContent:
http://svn.openfoundry.org/xulapp/trunk/demo/TextHunter/
TextHunter 的代码量非常少:
$ wc -l `find lib -name '*.pm'` `find js -name '*.js'`
231 lib/TextHunter/View/Main.pm
33 lib/TextHunter/View/Overlay.pm
43 lib/TextHunter/App.pm
206 js/main.js
135 js/openresty4ext.js
151 js/browser-listener.js
799 total
其中的 openresty4ext.js 可以忽略,那个是 OpenResty 的插件 JS 客户端类,在 TextHunter 中也没有实际使用。其中的 js/browser-listener.js 是通用目的的库,可以在你的插件测试平台中直接沿用。上面这些 .pm 文件中的许多 boilerplate 代码亦是 XUL::App 框架在创建项目时自动生成的,呵呵。
和插件开发相对的另一种基于 Firefox 的有趣的技术是编写 GreaseMonkey 脚本,但它是每页面加载的方式,或许更适合为第三方网站添加扩展应用或者测试单页,而非测试全站。XUL::App 框架让 Firefox 插件的开发变得简单了许多 ;)
这里非常有用的一段 JS 是在 JS 中直接向 DOM 节点发送鼠标点击事件或者键盘事件,这对测试而言至关重要:
http://svn.openfoundry.org/searchall/trunk/js/event-util.js
比如其中的 sendMouseEvent 函数可以这么使(文件中的注释不一致):
var elem = document.getElementById("foo");
sendMouseEvent({ type: 'click' }, elem);
类似地,sendKey 函数可以这么使:
var textbox = document.getElementsByTagName("INPUT")[0];
sendKey('enter', textbox)
这个 JS 文件取自 Mozilla 官方的自动化测试台,呵呵,经过我的一些修改。SearchAll 插件就使用了这种东西来自动化搜索引擎网站的“上一页”和“下一页”以及查询提交等动作(因此它才能自适应未知的搜索引擎,比如 soso 之类)。例如自动完成并提交搜索框表单的代码可以在这里找到:
http://svn.openfoundry.org/searchall/trunk/js/orig-view.js
而 SearchAll 中自动定位“上一页”、“下一页”链接,并自动点击进入的代码可以在下面这个 .js 找到:
http://svn.openfoundry.org/searchall/trunk/js/prev-next.js
由于 XUL::App, TextHunter, 和 SearchAll 都是我的 baby,若有更多细节问题,欢迎提出 :)
Cheers,
-agentzh
对Firefox倒是很感兴趣,但是插件技术从来没接触过,怎么开头啊?
请见 CPAN 上的 XUL::App 模块的文档:
http://search.cpan.org/perldoc?XUL::App
文档中有一个小 PPT 介绍一个 hello world 的示例。更复杂的带 JS 的示例请见 demo 目录下的插件实例:
http://svn.openfoundry.org/xulapp/trunk/demo/
其中最简单的一个示例是所谓的 TextHunter 插件,批量地逐一加载指定的 URL 列表,然后 dump 出其 document.body.textContent:
http://svn.openfoundry.org/xulapp/trunk/demo/TextHunter/
TextHunter 的代码量非常少:
$ wc -l `find lib -name '*.pm'` `find js -name '*.js'`
231 lib/TextHunter/View/Main.pm
33 lib/TextHunter/View/Overlay.pm
43 lib/TextHunter/App.pm
206 js/main.js
135 js/openresty4ext.js
151 js/browser-listener.js
799 total
其中的 openresty4ext.js 可以忽略,那个是 OpenResty 的插件 JS 客户端类,在 TextHunter 中也没有实际使用。其中的 js/browser-listener.js 是通用目的的库,可以在你的插件测试平台中直接沿用。上面这些 .pm 文件中的许多 boilerplate 代码亦是 XUL::App 框架在创建项目时自动生成的,呵呵。
和插件开发相对的另一种基于 Firefox 的有趣的技术是编写 GreaseMonkey 脚本,但它是每页面加载的方式,或许更适合为第三方网站添加扩展应用或者测试单页,而非测试全站。XUL::App 框架让 Firefox 插件的开发变得简单了许多 ;)
这里非常有用的一段 JS 是在 JS 中直接向 DOM 节点发送鼠标点击事件或者键盘事件,这对测试而言至关重要:
http://svn.openfoundry.org/searchall/trunk/js/event-util.js
比如其中的 sendMouseEvent 函数可以这么使(文件中的注释不一致):
var elem = document.getElementById("foo");
sendMouseEvent({ type: 'click' }, elem);
类似地,sendKey 函数可以这么使:
var textbox = document.getElementsByTagName("INPUT")[0];
sendKey('enter', textbox)
这个 JS 文件取自 Mozilla 官方的自动化测试台,呵呵,经过我的一些修改。SearchAll 插件就使用了这种东西来自动化搜索引擎网站的“上一页”和“下一页”以及查询提交等动作(因此它才能自适应未知的搜索引擎,比如 soso 之类)。例如自动完成并提交搜索框表单的代码可以在这里找到:
http://svn.openfoundry.org/searchall/trunk/js/orig-view.js
而 SearchAll 中自动定位“上一页”、“下一页”链接,并自动点击进入的代码可以在下面这个 .js 找到:
http://svn.openfoundry.org/searchall/trunk/js/prev-next.js
由于 XUL::App, TextHunter, 和 SearchAll 都是我的 baby,若有更多细节问题,欢迎提出 :)
Cheers,
-agentzh
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论