Watir是个不错的东东
想写一个程序,模拟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值。