存档

作者存档

在Watir中利用AutoIt关闭弹窗

2010年1月14日 leleba 12 条评论

今天是一个高兴的日子,我终于成功地利用AutoIt关闭IE弹窗了。

利用Watir进行网页测试已经有2年多了,但始终在处理IE弹窗上卡壳,网上有不少介绍和例子可供借鉴,但以前均未能测试成功。

先将代码列出:

require ‘watir’
require ‘win32ole’
require ‘watir/windowhelper’

………

………

ie33.link(:id, “something”).click_no_wait
sleep 3 #时间长短可能影响能否关闭弹窗

#sleep 2
puts “before autoit”
autoit = WIN32OLE.new(‘AutoItX3.Control’)
puts “before loop do”
    loop do
      puts “in loop”
      #ret = autoit.WinWaitActive(“Windows Internet Explorer”, “”,9)
      #ret = autoit.WinWaitActive(“来自网页的信息”, “”,9)
      ret = autoit.WinWaitActive(“Microsoft Internet Explorer”, “”,9)

      puts “after ret”
      puts(ret) 

      if (ret==1)
      autoit.Send(“{Enter}”)
      exit
      end
      sleep 3
    end

以前不成功的原因,主要是测试用电脑的环境不一样,今天尝试以上代码时,刚开始也不成功,ret始终等于0,偶然用鼠标碰了一下IE窗口,ret变为1。这才发现ie33.link(:id, “something”).click_no_wait语句之后的sleep时间长短很关键,不同的电脑以及网络速度不同,sleep时间不匹配的话,以上代码不能正常运行。

比较疑惑的是,以下代码不行:

require ‘watir’
require ‘win32ole’
require ‘watir/windowhelper’

………

………

Thread.new{

puts “before autoit”
autoit = WIN32OLE.new(‘AutoItX3.Control’)
puts “before loop do”
    loop do
      puts “in loop”
      #ret = autoit.WinWaitActive(“Windows Internet Explorer”, “”,9)
      #ret = autoit.WinWaitActive(“来自网页的信息”, “”,9)
      ret = autoit.WinWaitActive(“Microsoft Internet Explorer”, “”,9)

      puts “after ret”
      puts(ret) 

      if (ret==1)
      autoit.Send(“{Enter}”)
      exit
      end
      sleep 3
    end

}

ie33.link(:id, “something”).click_no_wait

在将ie33.link(:id, “something”).click_no_wait修改为ie33.link(:id, “something”).click之后,以上代码运行成功。

第一次往往是最难的,以后通过watir + nobogiri +mechanize + autoit, 基本上可以解决大部分网页测试的问题了。

我自己的原创: http://www.sdgz.cn

分类: watir 标签: , ,

watir中获得IE进程号的语句

2010年1月13日 leleba 没有评论

watir中获得IE进程号的语句:

ie33 = Watir::IE.start(“http://www.google.com“)

pid_number = Watir::IE::Process.process_id_from_hwnd(ie33.hwnd)

本文原创于: http://www.sdgz.cn

分类: watir 标签:

TOP5外包网站

2010年1月7日 leleba 没有评论

watir中统计网页中链接数量的语句

2010年1月7日 leleba 1 条评论

有时候需要统计网页中或者网页某个区域中的链接数量,刚开始我尝试以下语句,但不成功:
ie.links(:id, /bra bra/).length

后来发现以下语句可行:
ie.div(:id, “searchList”).links

之后发现如下更好的语句:

links_searchlist = ie101.links.find_all { |link| link.class_name == ‘permalink’ }
puts “the links in the searchlist:”
puts links_searchlist.length


searchlistlinks = ie102.links.find_all { |link| link.id =~ /hitURL/ }
links_searchlist = searchlistlinks.length
puts links_searchlist

searchlistlinks = ie33.links.find_all { |link| link.href =~ /something/ }
类似的语句不行:searchlistlinks = ie33.links.find_all { |link| link.url =~ /something/ }

最近发现,如果链接数量比较多,以上语句耗时太长,通过google和百度,找到了更高效的语句:

links = ie51.div(:id, ‘threadlist’).html.scan(/something/).count
puts links

分类: watir 标签:

firewatir 1.6.5不支持中文字符

2010年1月7日 leleba 1 条评论

想了很多办法,包括更改.rb文件和firefox浏览器的编码,都不能用firewatir 1.6.5往网页上输入中文字符,测试的代码如下:

require ‘rubygems’
require ‘firewatir’

ff = FireWatir::Firefox.new
ff.goto “http://www.google.com

sleep 1
ff.text_field(:name, ‘q’).set(‘电’)

我还利用了以下语句,同样没有效果:

g_word = ‘电’
puts g_word
g_word_gb = Iconv.iconv(“GB2312//IGNORE”,”UTF-8//IGNORE”,g_word)
puts g_word_gb

sleep 1
ff.text_field(:name, ‘q’).set(g_word_gb[0])

或者:

g_word = ‘电’
puts g_word
g_word_utf = Iconv.iconv(“UTF-8//IGNORE”,”GB2312//IGNORE”,g_word)
puts g_word_utf

sleep 1
ff.text_field(:name, ‘q’).set(g_word_utf[0])

阅读全文…

分类: watir 标签:

检查watir和firewatir版本的方法

2010年1月7日 leleba 没有评论

编辑一个rb文件并执行,可以获得watir和firewatir的版本信息,以下是相应的代码:

require ‘watir’

puts Watir::IE::VERSION

阅读全文…

分类: watir 标签:

ruby的url解码函数和url编码函数

2010年1月5日 leleba 没有评论

含中文字符的url是一些乱码,如中文”个”,在url中表示为”%b8%f6″。有时需要进行url解码和编码,两个函数如下:

def URLDecode(str)
str.gsub!(/%[a-fA-F0-9]{2}/) { |x| x = x[1..2].hex.chr }
end

def URLEncode(str)
str.gsub!(/[^\w$&\-+.,\/:;=?@]/) { |x| x = format(%%%x, x[0]) }
end

分类: ruby 标签:

给ruby程序以及ruby待操作的文件以完整的路径

2009年12月30日 leleba 没有评论

有的时候需要给ruby程序以及ruby待操作的文件以完整的路径,举例说明吧:

在g:\ding\anpc\163_anpc.rb程序中有如下代码:

3.times {
load ‘..\anpc\data_163.rb’
load ‘..\bin\bin_163.rb’
}

如果在g:\ding\anpc\ 下执行163_anpc.rb, 程序可以正常运行,但如果在别的路径,比如c:\,执行g:\ding\anpc\163_anpc.rb,程序就会报错,说找不到data_163.rb和bin_163.rb。

解决问题的方法是给ruby程序以完整的路径,如下所示:

3.times {
load File.join(File.dirname(__FILE__), ‘data_163.rb’)
load File.join(File.dirname(__FILE__), ‘../bin/bin_163.rb’)
}

类似的例子:

在g:\ding\anpc\data_163.rb程序中有如下代码:

#初始化user
users = []
File.open(‘user_163_anpc.txt’) do |f|
f.each_line do |line|
words = line.split(‘ ‘)
users << {:user => words[0], :password => words[1]}
end
end

该程序在g:\ding\anpc\ 下执行data_163.rb, 文件操作正常,但如果在别的路径,比如c:\,执行g:\ding\anpc\data_163.rb,程序就会报错,说找不到文件user_163_anpc.txt。

解决问题的方法是给待操作的文件以完整的路径,如下所示:

#初始化user
users = []
users_filename = File.join(File.dirname(__FILE__), ‘user_sina_anpc.txt’)
File.open(users_filename) do |f|
f.each_line do |line|
words = line.split(‘ ‘)
users << {:user => words[0], :password => words[1]}
end
end

本文原创于http://www.sdgz.cn

分类: ruby 标签:

watir程序开头应包含require ‘rubygems’

2009年12月28日 leleba 没有评论

最近忽然感觉到在watir程序的开头,应包含require ‘rubygems’,否则某些情况下会发生比较奇怪的现象。

本文原创于:http://www.sdgz.cn

分类: watir 标签:

似乎google group被封了

2009年12月22日 leleba 2 条评论

很长时间上不了watir的google group了,估计google group被封了。

本文原创于:http://www.sdgz.cn

分类: watir 标签: