Skip to content

Watir是个不错的东东

04月 2, 2009

想写一个程序,模拟IE的各种动作。曾经用过VBA实现过类似的功能,访问一个网页,模拟点击“印刷”,把网页的内容保存为Pdf文件。当然,使用了PDFCreator

但是总觉得VBA太丑了,不想用。然后想到了Python,因为最近开始学习Python的缘故。但是Python3.0对pywin32什么的没什么支持。然后想到了Perl,上网搜索了一下,用了use Win32::OLE。
在公司的机器(Windows XP SP3, activeperl5.8.9)跑的是好好的,就差回去找找匹配中文正则表达式的问题。
但是在家里的机器,始终出问题。
试了几次,发现问题出在
$IE->{visible} = 1;
这个语句上。在家里的机器(Vista Ultimate SP1,activeperl5.8.9)上,会打开两个IE窗口,一个是指定的URL,一个是空白的IE,在试图打开什么网页,但是始终打不开的样子。然后导致后面的语句执行出问题。
如果注释掉这个语句,就只打开制定的网页,但是似乎还报别的错误(记不清楚了)。

补:终于找到原因了。在家里面下面的Watir的代码也不能运行,错误和上面的一样。查了一下,找到原因了。
Try one of these:

  • Change your ruby permissions to “run as administrator”; or
  • Disable User Access Control; or
  • Turn off Internet Explorer Protected Mode

我就“以管理员身份运行”cmd.exe,然后在运行script。

早上想到Ruby似乎也有类似Perl 的Win32::OLE 的库,搜索了一下,发现了更好的Watir。似乎更多的是作为Web测试的,比如,这篇这篇。哎,刚刚大概看了一下,真是一个好东东啊,哈哈:)。这里还有很多例子。
文档和示例都不错,以后可以Web的测试就能自动化一点了?

下面是一段小代码,自动打开IE访问google,用高级搜索设置搜索关键字,每页显式20条结果:

require 'watir'

ie = Watir::IE.new
ie.goto(‘http://www.google.com/’)

#click the ‘Advanced Search’ link
ie.link(:text, ‘Advanced Search’).click

#set search value, textbox ‘all these words:’
ie.text_field(:name, ‘as_q’).set ‘ruby’
#set ‘Results per page’ to 20
ie.select_list(:name, ‘num’).select ’20 results’
#submit the form
ie.form(:name, ‘f’).submit

要注意的是select列表设值的时候,select后面的值是option的text值

No comments yet

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Connecting to %s

加关注

Get every new post delivered to your Inbox.