- 浏览: 362845 次
文章分类
最新评论
-
lord_is_layuping:
...
PYQT4 + Python2.6 + eric4-4.2.2a的安装全过程 -
597272095:
3Q
Oracle客户端PL/SQL 中文乱码解决 -
lpluck08:
如果不是在git本地版本目录中执行的话,会有问题。到本地版本目 ...
git 中文文件名 乱码 mac -
aiove:
-API
分享到: 阿撒旦发撒旦发速度飞洒发
iOS开发开源项目推荐 -
Wallian_hua:
感谢,楼主的详细分析,对我的启发很大。。我也正在研究这方面的技 ...
[ZT]简单OCR实现原理
5. 异常对象识别(Watir应用解决方案)
Watir基于处理,继承于web
document的对象提供较好的支持方法,但相对于处理windows对象较弱. 就目前从各网站收集的对象来看, 基本上,对于在IE实例对象打开的web标准对象
能够成功识别与操作,其它
的脱离当前IE窗口,打开的所有弹出框都不能正常识别。其中,弹出框对象占有异常对象识别中很大一部分。
目前碰到的弹出框, 我把他们分为三大类型:
1, Alerts 警告作用,如:sorry, 当前用户没有权限操作
2, Confirm 需要操作按钮, 如:你确认要删除当前记录?
3, Prompt+ select +confirm 需要用户输入,操作查询或点击, 最后确认, 如:Download/upload (浏览+选择文件)
下面给出,上面几种弹出框watir实现识别与操作的方法,
5.1. 弹出框基于autoIT + 线程实现方式
此种方法,对于第一、二种弹出框操作较有效,
因点击某个link/button等对象,而弹出的窗口(大部分弹出框可应用此种方式来实现。)
1, 定义方法
def check_for_popups
autoit = WIN32OLE.new('AutoItX3.Control')
#
# Do forever - assumes popups could occur anywhere/anytime in your application.
loop do
# Look for window with given title. Give up after 1 second.
ret = autoit.WinWait('消息 -- 网页对话框', '', 1)
#ret = WinActivate("Microsoft Internet Explorer", "")
#autoit.ControlClick("Microsoft Internet Explorer", "", "[CLASS:Button; INSTANCE:1]", 2)
puts(ret)
#
# If window found, send appropriate keystroke (e.g. {enter}, {Y}, {N}).
if (ret==1) then autoit.Send("{Enter}") end
#
# Take a rest to avoid chewing up cycles and give another thread a go.
# Then resume the loop.
sleep(3)
end
end
2, 程序体代码
ie.button(:name, "signin").click_no_wait
sleep(20)
$popup = Thread.new { check_for_popups } # start popup handler
at_exit { Thread.kill($popup) }
5.2. Call 另一ruby
文件
对于第二种弹出框,像安全警告点击, 并不通过操作与点击任何对象, 即呈现弹出窗口。
我尝试用3.1方法来实现,不成功。用下面方法替代:
1, 在watir/WindowHelper.rb文件中增加方法
def push_security_alert_yes_cn
@autoit.WinWait "安全警报", ""
@autoit.Send "{TAB}"
@autoit.Send "{TAB}"
@autoit.Send "{SPACE}"
End
2, 定义另一调用文件 tmp.rb
require 'watir/WindowHelper'
helper = WindowHelper.new
helper.push_security_alert_cn_yes
3, 在打开安全URL之前,启动调用ruby文件
require 'rubygems'
require 'watir' # the watir controller
require 'win32ole'
require 'watir/WindowHelper'
Thread.new{system('ruby c:\tmp.rb')} #你定义tmp文件存放路径
ie = Watir::IE.new
ie.goto("http://www.alipay.com.cn/
")
5.3. 修改框架底层
此种方法,针对弹出框3.
举例一, 上传下载文件
1, 修改底层代码input_elements.rb文件,
类 FileField中, 方法set.
为了支持中文,有一句替换修改为:
system("rubyw -e \"require 'win32ole'; @autoit=WIN32OLE.new('AutoItX3.Control');waitresult=@autoit.WinWait ' 选择文件', '', 15; sleep 1; if waitresult == 1\" -e \"@autoit.ControlSetText '选择文件', '', 'Edit1', '#{setPath}'; @autoit.ControlSend '选择文件', '', 'Button2', '{ENTER}';\" -e \"end\"")
2, 定义方法
def save_file(filepath)
ai = WIN32OLE.new("AutoItX3.Control")
ai.WinWait("文件下载", "", 5)
ai.ControlFocus("文件下载", "", "保存(&S)")
sleep 1
ai.ControlClick("文件下载", "", "保存(&S)", "left")
ai.WinWait("另存为", "", 5)
sleep 1
ai.ControlSend("另存为", "", "Edit1",filepath)
ai.ControlClick("另存为", "", "保存(&S)", "left")
ai.WinWait("下载完毕", "", 5)
ai.ControlClick("下载完毕", "", "关闭")
end
3, 程序体代码:
ie.file_field(:name, "xlsfile").set("c:\\samenameobject.html")
#上传你所指定的文件
或
ie.span(:text, "导出Excel表").click_no_wait
save_file("C:\\abc.xls")
#下载到你所指定的路径
针对弹出框3, 需要用户介入查询并操作:
举例二, 中供crm中类目与客户选择的弹出框,与第一种实现方式不同在于,
用到autoit中WinActivate与ControlClick方法,
require 'rubygems'
require 'watir' # the watir controller
require 'watir/WindowHelper'
require 'win32ole'
def check_for_popups
autoit = WIN32OLE.new('AutoItX3.Control')
loop do
ret = autoit.Winwait("选择 -- 网页对话框", "", 1)
puts ret
if (ret==1) then
autoit.WinActivate("[CLASS:Internet Explorer_TridentDlgFrame]", "")
autoit.Send("{TAB}")
autoit.Send("{TAB}")
#autoit.Send("湖州")
#autoit.Send("{ASC 2709}")
#autoit.SendUnicode("a")
#autoit.ClipPut ("杭")
#autoit.ClipGet
#autoit.ToolTip "This is a tooltip杭州", 0, 0
#autoit.Sleep 2000
autoit.Send("{TAB}")
autoit.Send("{TAB}")
autoit.Send("{Enter}")
autoit.WinActivate("[CLASS:Internet Explorer_TridentDlgFrame]", "")
autoit.ControlClick("选择 -- 网页对话框", "", "[CLASS:Internet Explorer_TridentLstBox; INSTANCE:2]", 2)
autoit.Send("{TAB}")
autoit.Send("{Enter}")
autoit.Send("{TAB}")
autoit.Send("{TAB}")
autoit.Send("{TAB}")
autoit.Send("{TAB}")
autoit.Send("{Enter}")
end
sleep(3)
end
end
ie=Watir::IE.new
ie.goto("http://10.2.6.4:5100/bin/member/signin
")
#ie.goto("http://10.2.6.4:5100/
")
#ie.element_by_xpath("//span[contains(text(), 'Main Road Nijmegen')]").click
ie.text_field(:name, "id").set("mhl1805")
ie.text_field(:name, "password").set("zxcvbnm")
ie.button(:name, "signin").click
ie.frame(:name, "left").link(:url, "http://10.2.6.4:5100/v3/help_cust.htm").click
ie.frame(:name, "left").link(:text, "新签中供客户").click
# start popup handler
ie.frame(:name, "right").frame(:name, "rtop").button(:value, "选择客户").click_no_wait
sleep(20)
$popup = Thread.new { check_for_popups }
at_exit { Thread.kill($popup) }
针对第三种popup window, 如果需要与用户交互,且需要输入中文时,若用autoit sendkey对待中文支持(但官方文档说支持中文输入, 网上有不少人和我遇到同样问题),尚没有找到有效方案,有待进一步跟进。
除上述弹出框需要特殊处理外,watir中也有一些扩展tag,或第三方控件需要特殊处理的,
像:
5.4. web HTML编辑器
中文站的html编辑器提供: 操作ID或name操作起来较方便直接
require 'rubygems'
require 'watir' # the watir controller
require 'watir/WindowHelper'
require 'win32ole'
ie=Watir::IE.new
ie=Watir::IE.attach(:title, /阿里助手/)
ie.text_field(:name, "_fmo.a._0.s").set("mhl1805")
ie.document.getElementByid("_editor").contentWindow.focus()
ie.send_keys("abcsadfasfd")
但也碰到有些web页面,不提供任何ID,只能用autoIT方法来send tab实现
require 'rubygems'
require 'watir' # the watir controller
require 'watir/WindowHelper'
require 'win32ole'
ie=Watir::IE.new
#ie=Watir::IE.attach(:title, /Alibaba/)
ie.goto('http://us.my.alibaba.com/product/buyoffer/post_buying_lead.htm')
ie.text_field(:name, "_fmp.bu._0.su").set("mhl1805")
ie.text_field(:name, "_fmp.bu._0.su").set("中国人")
ie.checkbox(:id, "detailDesc").set
ie.checkbox(:id, "detailDesc").focus()
ie.send_keys("\t"*9)
ie.send_keys('Hello Worldabcdef')
5.5. 对象识别其它常用TAG内置方法引用
如:IE.div , ie.span, ie.cell, ie.table方法,可以实现点击操作,取值操作等.
另外提供QTP
类似描述性编程,同类型对象统计:
ie.buttons.each { |b| puts b.to_s }
puts ie.checkboxes.length
puts ie.links.length
puts ie.buttons.length等等
对于常用的innertext属性, 在watir中已经封装到方法,可以直接引用。如:
ruby在对象识别底层,封装了innertext
实现,调用方法text即可:
如:puts ie.div(:id, "intelligentWord").link(:id, index.to_s).text
最后:返回文本与源代码,用下面方法:
puts ie.text()
puts ie.html()
5.6. 识别对象正则表达式支持
当然,ruby提供强大的正则表达式支持,如:属性标识正则
ie=Watir::IE.attach(:title, /Alibaba/)
Ruby的正则表达式以"//"作为基本框架,表达式内容位于"/"之间。表达式返回一个RegExp的对象。
表达式的一般规则:
/a/匹配字符a。
/\?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), +, *.
.匹配任意字符,例如/a./匹配ab和ac。
/[ab]c/匹配ac和bc,[]之间代表范围。例如:/[a-z]/ , /[a-zA-Z0-9]/。
/[^a-zA-Z0-9]/匹配不在该范围内的字符串。
/[\d]/代表任意数字,/[\w]/代表任意字母,数字或者_,/[\s]/代表空白字符,包括空格,TAB和换行。
/[\D]/,/[\W]/,/[\S]/均为上述的否定情况。
关于正则其它用法,请参照《watir技术集锦》
5.7. 最后攻略
总之,对于对象识别与操作,要借助于上述文档中的, 灵活运用autoit, xpath与异常对象操作方法。对于watir不支持的windows控件,想到第一个方法,就是采用第三方autoit技术,来模拟键盘或鼠标操作。
对于操作web对象,watir不支持特殊tag,除了扩展其底层代码外,只能深深研究一下xpath了.
最后,再搞不定,就只能到watir group里咨询高人了,呵呵。
尚没有碰到其它更好方法。。。
一些错误
如果报错 AutoITX3, it helps to make automation happen
那就在windows 下运行
regsvr32 "C:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\AutoItX3.dll"
Unknown OLE server: `AutoItX3.Control' (WI2OLERuntimeError)
that might mean you have not resisted the AutoItX3.dll in your computer,
in current Watir version, AutoItX3.dll has been included in the watir folder,
so Run the command in "Run":
regsvr32 "C:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\AutoItX3.dll"
then you will not get the errors :)
learn AutoItX3, please go to http://www.autoitscript.com/autoit3/index.shtml
I just want to use it to handle the popup windows when writing Watir scripts
发表评论
-
最强大脑第六期饶舜涵和倪梓强 他们的大脑是天生的么?
2014-02-15 01:39 2981刚看了 最强大脑第6期, 里面有两个人我比较关注 饶舜 ... -
宏碁 Acer AS4738ZG-P622G32Mncc 驱动
2011-06-13 22:37 1605主板 Intel 主板驱动 9.1.1.102 ... -
git 中文文件名 乱码 mac
2011-06-10 18:32 3645git 默认中文文件名是 xx% 是因为 对0x80以上的字 ... -
必看电影
2010-09-03 11:50 1662moxue32 提名的电影是《 ... -
jQuery.validate使用必备
2010-09-01 19:34 1291jQuery.validate使用必备 ... -
centos 雅黑
2010-04-07 15:39 1669#所有操作均在root权限下进行 1、到xp或者vi ... -
【转】西厢计划原理
2010-03-19 10:28 20984转 http://blog.youxu.info/2010 ... -
CENTOS install mysql
2010-01-21 14:53 2194当前的数据库种类比较多,有MS-SQL,Oracle,MYSQ ... -
不需要让青少年有判断力和批判力
2010-01-21 13:14 1525“不需要让青少年有判断力和批判力。只要给他们汽车、摩托车、美丽 ... -
putty中文乱码问题解决
2010-01-20 21:16 1437用putty从windows xp连接ubuntu serve ... -
vi backspace
2010-01-16 14:07 1063vi ~/.vimrc set backspace=i ... -
如何做SVN迁移
2009-07-31 10:43 1537如何做SVN 迁移 ... -
pdf 免费 转换网站
2009-04-26 13:46 12025在dig网站上看到一个在线转换pdf的网站,现在收集整理如下: ... -
ruby 遍历文件夹 所有文件
2009-04-03 17:00 7463def traverse_dir(file_path) i ... -
大姐~~~假钞不是这么做的
2009-01-06 22:20 1163大姐~~~假钞不是这么做的 楼主发帖 一妇女拿假钞去买早 ... -
JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用 developerWorks
2008-11-17 01:44 1739JPEG 原理详细实例分析及其在嵌入式 Linux 中 ... -
Bmp 标准
2008-11-13 16:44 2246工具软件:工具软件:H ... -
JPEG文件格式简单分析
2008-10-27 23:19 3183摘要: 这篇文章大体上介绍了 JPEG 文件的结构信息以及它 ... -
JPEG格式 标准 规范 二进制
2008-10-27 23:14 7383JPEG格式 微处理机中的存放顺序有正序(big end ...
相关推荐
### Ruby Watir 教程详解 #### 一、Ruby Watir 概述 **Ruby Watir** 是一种用于网页自动化测试的工具库,它能够模拟用户在浏览器中的操作行为,如点击按钮、填写表单等,非常适合进行功能测试、回归测试和系统测试...
### Ruby Watir框架自动化介绍 #### 一、Ruby Watir框架概述 Watir(Web Application Testing In Ruby)是一个用于Web应用程序测试的Ruby库。它提供了一种简单且强大的方法来模拟用户与Web页面的交互行为,进而...
ruby+watir技术实现的论坛发帖机器人,不完善。
### Ruby 和 Watir 的安装指南 #### 背景与问题描述 在尝试安装 Watir 时遇到问题,尤其是在服务器 2003 上。主要问题是 Watir 的依赖包 `activesupport` 需要 Ruby 版本 >= 1.8.7,而当前系统上安装的是 Ruby ...
Watir(Web Application Testing in Ruby)是Ruby社区开发的一个开源库,它允许我们用Ruby来编写浏览器自动化测试,支持多种主流浏览器,如Chrome、Firefox、Safari等。 标题中的“test_logger1.rar_Logger wat_...
Ruby和Watir(Web Application Testing in Ruby)是一个强大的自动化测试框架,主要用于Web应用程序的测试。Ruby是一种面向对象的、动态的编程语言,以其简洁、优雅的语法和强大的元编程能力而受到开发者的喜爱。...
此文件太大,压缩成两个part,此为Part1 ,两个文件下载后放一起解压缩即可。 watir本地安装的安装文件共六部分,按照一~六安装即可,每一部分重要的内容在描述里面说明,如有疑问,可以留言。
Watir,全称为“Web Application Testing In Ruby”,是一款基于Ruby语言的开源Web自动化测试框架。它的设计目的是模拟人们在浏览器中的行为,如点击链接、填写表单和按下按钮,并能够检查预期的文本是否出现在页面...
Ruby on Watir 是一个强大的自动化测试框架,它结合了Ruby编程语言、Watir库和Cucumber测试工具,为Web应用程序的测试提供了一种简洁而高效的方法。Ruby是一种面向对象的编程语言,以其清晰的语法和对开发者的友好性...
Ruby-Watir是一种开源自动化测试框架,专门用于在Ruby编程语言中进行Web应用程序的测试。它允许开发者通过编写Ruby代码来模拟用户与浏览器的交互,从而实现端到端的测试。这个工具的名字“Watir”是“Web ...
Ruby 和 Watir 是一个强大的自动化测试组合,尤其适用于Web应用程序的测试。Ruby 是一种动态、面向对象的编程语言,以其简洁、优雅的语法和强大的元编程能力而受到开发者喜爱。Watir,全称Web Application Testing ...
2.本地安装watir-1.4.1.gem,执行gem install watir-1.4.1.gem -l 3.本地安装rubygems-update-1.3.4.gem,执行 gem install rubygems-update-1.3.4.gem 4.更新rubygems,执行update_rubygems (这一步先忽略,有影响...
### Windows 下 Ruby + Watir 自动化测试的环境搭建及数据读取 #### 一、概述 本文将详细介绍如何在 Windows 系统上搭建 Ruby 和 Watir 的自动化测试环境,并介绍如何通过 Ruby 脚本读取不同数据源中的测试数据进行...
Ruby 自动化框架Watir(Web Application Testing in Ruby)是一个强大的工具,专为进行Web应用程序的端到端测试而设计。这个框架允许开发者使用Ruby语言编写测试脚本,与浏览器进行交互,模拟真实用户的行为,从而...
Ruby 2.00、Selenium WebDriver 和 Watir WebDriver 是自动化测试领域中广泛使用的工具,尤其在Web应用程序的测试中。下面将详细讲解这三个概念及其相互关系。 Ruby 2.00 是Ruby编程语言的一个版本,发布于2013年,...
**Ruby和Watir简介** Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。它强调代码的可读性和开发者的工作效率,因此在软件开发领域,尤其是在Web开发和自动化测试中,...
Watir(Web Application Testing in Ruby)是一个开源的Ruby库,用于自动化浏览器操作,它使得开发者能够用Ruby代码编写测试脚本来与网页交互,进行功能测试和验收测试。 **描述:“Watir开发文档。包括帮助文档,...