在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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" /> 获得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,不过借助第三方库,也能比较优美的解决。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论