Ruby+Watir经验谈: Understanding Watir
使用Watire,主要通过是使用 Watir::IE的一个实例来获得页面上的各种元素,比如button,link...,然后你可以对这些元素进行操作,比如 点击一个button, 点击一个link...
ie = IE.new
ie.goto("http://somewhere")
ie.button(:caption, /save/).click
实际上,需要注意的是,Watir::IE封装了一个当前页面的 DOM tree,而不是html source。比如如果用javascrīpt动态产生一个元素,在这里仍然可以访问。
这种访问DOM tree的能力并不是Watir::IE所独有的,div,frame都具有这样的能力。实际上,这种能力是 Watir::SupportedSubElements提供的。一般来说所有内部能包含任意子tag的元素都include Watir::SupportedSubElements, like Watir::Frame, Watir::Div, Watir:: TableCell, Watir:: Form...所以我建议把关于Watir::SupportedSubElements的API页面地址放在收藏夹,你会经常需要访问他们 :).
获得元素的方法参数一般来说有两种
1)how, value
大多数element都可以通过这种方式获得。
how给出了方式,比如:id, :name
value给出了值,比如
<input type="button" id="saveBtn" value="Save"/>
获得button的代码是: ie.button(:id, "myId")
2) how, what, value
这种方式适用于访问radio或者checkbox。我们知道可能有多个radio具有同样的name,只是value不同。
比如一个选择男或女的的form field有两个radios,
<input type="radio" name="gender" value="male"/>Male
<input type="radio" name="gender" value="female"/>Male
获得第一个radio的代码是: ie.radio(:name, "gender", "male")
注意, 如果给定条件的element不存在,方法返回的不是nil,仍旧是这个类型的元素的一个实例。 要用element.exists? 来判断这个元素是否真的存在。调用一个不存在的element的任何方法,都会触发一个Exception。
下面是Watir的源代码结构。
module Watir
# 所有的Exception都定义在另外一个文件里,
# 且都位于Watir::Exception这个Module里面,
# 这句话,把所有的Exception都引入Watir这个Module,方便使用
include Watir::Exception
# 这个module为每一个Dom Tree上的元素定义了一个访问方法
# 比如,为button定义一个button方法,当要得到一个button时就可以用
# ie.button(:name, 'b1')这样的方式
#
# IE和Frame都要include这个module,这样IE和Frame都具有这种能力
# 理论上,任何可以包括任意别的tag的tag都可以引入这个module,
# 比如<td>, <div>
module SupportedSubElements
def button(how, what=nil)
end
def link(how, what=nil)
end
end
class IE
# IE 拥有了访问Dom tree上element的方法
include SupportsSubElements
# 一个工厂方法,你总是可以用这个方法来初始化一个browser对象
def IE.start(url)
end
# IE对象提供了很多操控IE window的方法比如
# 前进,后退,刷新,goto, maximize, minimize
def back
end
# 还提供了访问HTML code的方法
def html
return document.body.outerHTML
end
def text
return document.body.innerText.strip
end
end
class Form < IE
#Form可以访问它内部的Dom tree。另外,From还提供了一些Form特定的方法,
#比如submit,方法和获取form的name, action, method的方法
def name
end
end
# Element 是大多数页面元素的基类.
# 它定义了取得 适合大多数元素的成员变量
# id, name, type, value, title, disabled(某个值不存在的话,返回"");
#
# 和成员方法
# click, exists?, enabled?, html, ...
class Element
end
# ElementCollections是 代表某类页面元素的集合
# 比如 links, spans,
# ElementCollections 引入了Enumerable module
# 所以你可以方便的操作里面的元素
class ElementCollections
include Enumerable
end
end
Watir,不得不说是一个非常精彩的library,它提供的功能非常强大,还能保持API直观,统一,易于使用。再加上,它的原生操纵语言是强大的ruby,用Watir写对于 web的 测试简直就是手拿一把锋利的多功能瑞士军刀。
Watir的不足之处是它不能处理超出Dom Tree之外的东西,比如javascrīpt popup box,不过借助第三方库,也能比较优美的解决。
转自: http://www.51testing.com/?uid-764-action-viewspace-itemid-11525
Ruby+Watir经验谈: Understanding Watir相关推荐
- watir学习笔记/ruby
开发测试案例(Developing Test Cases) 1.打开编辑器 2.以.rb为你的文件扩展名 3.在测试文件的第一句写上"require 'watir'",确保可以访问 ...
- ruby watir 登陆邮箱
登陆163邮箱: 1 require "watir" 2 test_site = "http://mail.163.com/" 3 ie = Wati ...
- Watir自动化环境搭建
参考资料: http://watir.com/guides/ Watir Watir( Web Application Testing in Ruby) 是一个优秀的开源工具,用于开发基于Web 应用 ...
- 【iOS工具】rvm、Ruby环境和CocoaPods安装使用及相关报错问题解决(2016 12 15 更新)...
〇.前言 在iOS开发中 [CocoaPods](https://github.com/CocoaPods/CocoaPods) 作为库依赖管理工具就是一把利器. 有了 CocoaPods 则无需再通 ...
- 分布式Ruby解决之道 - DRb
分布式Ruby解决之道 其实用Druby很久了,今天需要完成一个进程数据同步的机制,我需要的不是运行速度快,不是用 linux / mac 下的扩展,而是独立,快速开发效率,方便最简单的Ruby环境可 ...
- 分布式Ruby解决之道
其实用Druby很久了,今天需要完成一个进程数据同步的机制,我需要的不是运行速度快,不是用 linux / mac 下的扩展,而是独立,快速开发效率,方便最简单的Ruby环境可运行,可以吗? DRb( ...
- 开源/免费界面自动化测试工具对比研究
摘要: 随着我行自动化测试实施范围的不断扩大,参与界面自动化测试的应用系统越来越多.我行的应用系统现阶段多采用商用工具QTP(UFT)作为执行工具来进行界面自动化测试,采购的QTP license是有 ...
- 【转】写给想学习自动化测试的新人
最近通过各种渠道发现大家对一些测试工具的基本情况不太清楚,经常会问类似于watir与watir webdriver的区别,我有1个项目,是用watir还是用selenium webdriver呢,之类 ...
- Web Monitor/Dev/Test Tool Collection 网站/网页监控/开发/测试工具集合
HttpWatch HttpWatch是强大的网页数据分析工具. 包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功能.报告输出. Features: ...
最新文章
- 谷歌量子计算突破登Science封面!首次对化学反应进行量子模拟
- 月薪5K的运维小白如何成为月薪5W的高级架构师?
- Pandas中的 transform() 结合 groupby() 用法示例
- Chapter1-5_Speech_Recognition(Alignment of HMM, CTC and RNN-T)
- iphone怎么查看wifi密码_WiFi密码忘了怎么办?一秒找回密码
- android 自定义加载动画效果,Android自定义加载动画-旋转的叶子
- mysql商品表_MySQL数据库创建商品表
- 2018最新版省市区三级联动数据
- Java项目:jsp+servlet网上会议室预约系统
- 前端开发工程师的前传
- Unity Rect.OverLaps(Rect other) 改进
- Excel日期加斜杠,日期时间戳互转
- gitlab centos 安装配置运维笔记
- 【附源码】计算机毕业设计java在线学习系统的设计与开发设计与实现
- 10-250 B1-2查询供应商及其供应的产品情况
- ava.util.ConcurrentModificationException 异常
- 为什么你的下一餐要交给机器人?
- 通过vite-plugin-svg-icons 使用SVG图片
- 魔兽怀旧卓越服务器微信,魔兽怀旧服玩家吐槽:没有了工作室后,永久60级服务器一地鸡毛...
- 2022年4月线上终端药品增长迅猛,市场政策合规进程加快
热门文章
- 如何用canvas实现五子棋
- IEEE之后,学术政治化会成为人类的“潘多拉魔盒”吗?
- web课程设计网页规划与设计:文化网站设计——中国水墨风书画艺术网站(12个页面)...
- HTML5期末大作业:全屏页面滚动漫画风格个人主页网站设计 (HTML+CSS)
- ASEMI代理AD9951YSVZ原装ADI车规级AD9951YSVZ
- python判断年份是否为闰年
- eNSP配置静态路由实例
- linux压缩分区大小,linux如何无损调整分区大小的详细介绍
- MT6595发布会信息汇总
- linux储存的基本管理(硬盘管理)