2009年4月13日星期一

[PerlChina] Re: 关于Perl下进行JavaScript的测试

2009/4/14 skier.tp <skier2701@gmail.com>
对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 访问该论坛

-~----------~----~----~----~------~----~------~--~---

没有评论: