watir

上一篇 / 下一篇  2011-08-17 18:00:46 / 个人分类:游戏自动化


Watir主页 http://wtr.rubyforge.org/

安装方法
Windows:
  gem update --system
  gem install watir
Linux:
  sudo gem update --system
  sudo gem install watir

Watir 语法(Web Application Testing in Ruby)
Ruby代码  收藏代码
  1. # 使用Watir工具,需要在脚本中加上   
  2. require 'watir'  
  3.   
  4. # 创建一个IE的实例   
  5. ie = Watir::IE.new   
  6. # 或者在创建的同时直接转到页面   
  7. ie = Watir::IE.start('http://www.text.com/')   
  8. # Watir使用start方法同时创建一个浏览器实例并转到一个页面。   
  9. # IE浏览速度   
  10. ie.speed = :fast   
  11. ie.speed = :slow   
  12.   
  13. # 页面导航   
  14. ie.goto('http://www.text.com/')   
  15. # 注: ie.goto还可以运行javascript的代码如: ie.goto("javascript.: ie.document.write("Hello World");")   
  16.   
  17. # 取得当前网页的网址   
  18. ie.url   
  19.   
  20. # 点击超链接   
  21. ie.link(:text , "Pickaxe").click   
  22. ie.link(:href, /http:\/\/pragmaticprogrammer\.com/).click   
  23. ie.link(:name => 'foo':index => 1).click   
  24.   
  25. # 超链接的uri   
  26. ie.link(:text , "Pickaxe").href   
  27. ie.link(:index, 1).href   
  28. ie.link(:text => "reply":index => 2).href   
  29.   
  30. # 超链接的文本   
  31. ie.link(:href , /http:\/\/pragmaticprogrammer\.com/).text   
  32.   
  33. =begin  
  34. 对应的HTML代码为:   
  35. <a href='http://pragmaticprogrammer.com/titles/ruby/'>Pickaxe</a>   
  36. =end  
  37.   
  38. # img标签   
  39. ie.image(:name'image').src   
  40. ie.image(:index, 2).src   
  41.   
  42. =begin  
  43. 对应的HTML代码为:   
  44. <img name = img src='http://pragmaticprogrammer.com/titles/ruby/top.gif'>   
  45. <img name = img src='http://pragmaticprogrammer.com/titles/ruby/head.gif'>   
  46. =end  
  47.   
  48. # 设置复选框   
  49. ie.checkbox(:name"checkme").set   
  50. ie.checkbox(:name"checkme""1").set # 使用name和value属性设置复选框   
  51.   
  52. # 清除复选框   
  53. ie.checkbox(:name"checkme").clear   
  54. ie.checkbox(:name"checkme""1").clear # 使用name和value属性清除复选框   
  55.   
  56. =begin  
  57. 对应的HTML代码为:   
  58. <input type = "checkbox" name = "checkme" value = "1">   
  59. =end  
  60.   
  61. # 设置单选框   
  62. ie.radio(:name"clickme").set   
  63. ie.radio(:name=>'clickme':index=>2).set   
  64. ie.radio(:name"clickme""1").set # 使用name和id属性设置单选框   
  65.   
  66. # 使用name属性清除单选框   
  67. ie.radio(:name"clickme").clear   
  68. ie.radio(:name"clickme""1").clear # 使用name和id属性清除单选框   
  69.   
  70. =begin  
  71. 对应的HTML代码为:   
  72. <input type = "radio" name = "clickme" id = "1">   
  73. <input type = "radio" name = "clickme" id = "2">   
  74. =end  
  75.   
  76. # 设置下拉框   
  77. ie.select_list(:name"selectme").select('Python'# 使用text属性和值来设置下拉框   
  78. ie.select_list(:name"selectme").select_value('2'# 使用value属性和值来设置下拉框   
  79.   
  80. # 使用name属性和值来清除下拉框   
  81. ie.select_list(:name"selectme").clearSelection  
  82.   
  83. =begin  
  84. 对应的HTML代码为:   
  85. <select name = "selectme">   
  86. <option value = 1>Ruby   
  87. <option value = 2>Java   
  88. <option value = 3>Python   
  89. <option value = 4>C   
  90. </select>   
  91. =end  
  92.   
  93. # 文本的框设置   
  94. ie.text_field(:name"typeinme").set("Watir World")   
  95.   
  96. # 清空文本输入框   
  97. ie.text_field(:name"typeinme").clear   
  98.   
  99. =begin  
  100. 对应的HTML代码为:   
  101. <input type = "text" name = "typeinme">   
  102. =end  
  103.   
  104. # 通过值或name属性点击button   
  105. ie.button(:value"Click Me").click   
  106. ie.button(:name"clickme").click   
  107.   
  108. =begin  
  109. 对应的HTML代码为:   
  110. <input type = "button" name = "clickme" value = "Click Me">   
  111. =end  
  112.   
  113. # 通过值或name属性点击Submit   
  114. ie.button(:value"Submit").click   
  115. ie.button(:type"Submit").click   
  116. ie.button(:name"Submit").click   
  117.   
  118. =begin  
  119. 对应的HTML代码为:   
  120. <form. action = "submit" name = "submitform" method="post">   
  121. <input type = "submit" value = "Submit">   
  122. </form>  
  123. =end   
  124.   
  125. # 表单中的图片按钮   
  126. ie.button(:name"doit").click   
  127.   
  128. =begin  
  129. 对应的HTML代码为:   
  130. <form. action = "submit" name = "doitform" method="post">   
  131. <input type="image" src = "images/doit.gif" name = "doit">   
  132. </form>   
  133. =end  
  134.   
  135. # 没有按钮的表单   
  136. ie.form(:name"loginform").submit # 通过name,action以及method属性来提交表单   
  137. ie.form(:action"login").submit   
  138.   
  139. =begin  
  140. 对应的HTML代码为:   
  141. <form. action = "login" name = "loginform" method="get">   
  142. <input name="username" type="text">   
  143. </form>  
  144. =end   
  145.   
  146. # 框架   
  147. ie.show_frames #可以打印出当前页面框架的数量和名称   
  148. # Watir允许通过名称属性来访问框架  
  149. ie.frame("menu")   
  150. # 如果要访问menu框架中的一个超链接,可以   
  151. ie.frame("menu").link(:text"Click Menu Item").click   
  152.   
  153. # 嵌套框架   
  154. ie.frame(:name"frame1").form(:name'form1')   
  155.   
  156. # 新窗口   
  157. # 一些Web应用会弹出新窗口或打开一个新窗口,可以使用attach方法来访问并控制新窗口。通过标示新窗口的URL或者title来访问。   
  158. ie2 = Watir::IE.attach(:url'http://www.text.com/')   
  159. ie3 = Watir::IE.attach(:title'Test New Window')   
  160. # 也可以使用正则表达式   
  161. ie4 = Watir::IE.attach(:title, /Test New/)   
  162. # 注意:不要把新窗口分配到你的ie变量,最好给新窗口一个不同的名字   
  163.   
  164. # 访问Table元素:   
  165. t = $ie.table(:id,"data")   
  166. t = Table.new($ie,:id,"data")   
  167. t = $ie.table[1]   
  168.   
  169. # tr,td元素   
  170. tr = ie.row(:id,"title")   
  171. tr = TableRow.new(ie,:id,"title")   
  172.   
  173. td = ie.cell(:id,"name")   
  174. td = TableCell.new(ie,:id,"name")   
  175.   
  176. # Watir中Table,TableBody,TableRow,TableCell这几个类,都提供了一个索引方法"[](index)"来定位其下一层的子元素对象,该方法为实例方法,"index"为传入的参数,索引值从1开始,而非从0开始。   
  177. # 用法如下:   
  178. # 以table的第一行,第一个元素为例:   
  179. tr1 = t.[](1)   
  180. td1 = tr1.[](1)   
  181. # 也可以连续访问:td1 = t.[](1).[](1)   
  182. # 如果td中还有其他元素,可以通过td的实例方法直接访问,以checkbox为例:   
  183. cb = td1.checkbox(:id,'navigate_id').click   
  184.   
  185. =begin  
  186. 对于以上所提到的对象,都是从Element继承而来,所以click,enabled?,exists?,fireEvent,flash,focus等方法都直接可以使用。   
  187. 如果你的td元素定位准确了,且鼠标响应事件没有错误的话,那么应该能看到点击后的效果。   
  188. 建议多查一下Watir的API Reference http://wtr.rubyforge.org/rdoc/   
  189. =end  
  190. # 代码如下:   
  191. t = ie.table(:id,"CoolMenu2menutable")   
  192. td_logout=t.[](1).[](16)   
  193.   
  194. # 先找到Table,再索引TR,再索引到TD   
  195.   
  196. # 运行Ruby时不显示browser方法   
  197. # 运行Ruby程序文件时在后面加 "-b"   
  198. # ex:   
  199. test.rb -b   
  200. # 也可以做成.bat文件   
  201. ex: test.bat   
  202. ruby.exe test.rb -b   
  203.   
  204. # 获取隐含对象值   
  205. # <INPUT type=hidden value="您的Email" name="field1">  
  206. values = ie.hidden(:name'field1').value   
  207.   
  208. # 获取窗口对象   
  209. # 方法1:   
  210. ie2 = Watir::IE.attach(:url,'http://www.google.cn/'#根据URL获取   
  211. # 方法2:   
  212. ie3 = Watir::IE.attach(:title,'Google'#根据窗口标题获   
  213. # 方法3:   
  214. ie4 = Watir::IE.attach(:title, /google.cn/) #正则表达式匹配获取   




目前已知Watir在处理JS弹出窗口时比较麻烦,但也有详细的解决办法(麻烦),处理其他EB应用绰绰有余!
以下处理弹出窗口的方法转载自FreeMyMind的Blog


如果不需要对弹出窗口做条件处理,那么直接用send_keys模拟alt+f4操作即可;但如果需要做条件处理,那么就需要用到一个类WindowHelper(WindowHelper.rb),其中提供处理各种弹出窗口的方法,直接使用即可,如:
Ruby代码  收藏代码
  1. def push_security_alert_yes  
  2.   @autoit.WinWait "Security Alert"""  
  3.   @autoit.Send "{TAB}"  
  4.   @autoit.Send "{TAB}"  
  5.   @autoit.Send "{SPACE}"  
  6. end  


这就是一个模拟点击安全警告“yes”按钮的方法。不过需要注意的是在中文环境下这个类中的方法是不能直接使用的,因为它是默认支持英文环境的,所以是找不到中文标题的窗口的,故需要对方法做本地化处理,如下:
Ruby代码  收藏代码
  1. def push_security_alert_yes  
  2.   @autoit.WinWait "安全警告"""  
  3.   @autoit.Send "{TAB}"  
  4.   @autoit.Send "{TAB}"  
  5.   @autoit.Send "{SPACE}"  
  6. end  

TAG:

 

评分:0

我来说两句

日历

« 2024-05-15  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 10250
  • 日志数: 15
  • 图片数: 1
  • 建立时间: 2011-04-08
  • 更新时间: 2012-07-12

RSS订阅

Open Toolbar