存档

‘watir’ 分类的存档

在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 标签:

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 标签:

watir在中文环境下使用xpath的一个注意事项

2009年11月17日 没有评论

用了2年多的watir,总不能使用xpath,执行到xpath语句时,出现一大堆出错信息,如Missing end tag for……

偶然在网上发现,在程序开头加上如下语句即可解决问题:

require “win32ole”
WIN32OLE.codepage = WIN32OLE::CP_UTF8

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

分类: watir 标签: