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)
- # 使用Watir工具,需要在脚本中加上
- require 'watir'
- # 创建一个IE的实例
- ie = Watir::IE.new
- # 或者在创建的同时直接转到页面
- ie = Watir::IE.start('http://www.text.com/')
- # Watir使用start方法同时创建一个浏览器实例并转到一个页面。
- # IE浏览速度
- ie.speed = :fast
- ie.speed = :slow
- # 页面导航
- ie.goto('http://www.text.com/')
- # 注: ie.goto还可以运行javascript的代码如: ie.goto("javascript.: ie.document.write("Hello World");")
- # 取得当前网页的网址
- ie.url
- # 点击超链接
- ie.link(:text , "Pickaxe").click
- ie.link(:href, /http:\/\/pragmaticprogrammer\.com/).click
- ie.link(:name => 'foo', :index => 1).click
- # 超链接的uri
- ie.link(:text , "Pickaxe").href
- ie.link(:index, 1).href
- ie.link(:text => "reply", :index => 2).href
- # 超链接的文本
- ie.link(:href , /http:\/\/pragmaticprogrammer\.com/).text
- =begin
- 对应的HTML代码为:
- <a href='http://pragmaticprogrammer.com/titles/ruby/'>Pickaxe</a>
- =end
- # img标签
- ie.image(:name, 'image').src
- ie.image(:index, 2).src
- =begin
- 对应的HTML代码为:
- <img name = img src='http://pragmaticprogrammer.com/titles/ruby/top.gif'>
- <img name = img src='http://pragmaticprogrammer.com/titles/ruby/head.gif'>
- =end
- # 设置复选框
- ie.checkbox(:name, "checkme").set
- ie.checkbox(:name, "checkme", "1").set # 使用name和value属性设置复选框
- # 清除复选框
- ie.checkbox(:name, "checkme").clear
- ie.checkbox(:name, "checkme", "1").clear # 使用name和value属性清除复选框
- =begin
- 对应的HTML代码为:
- <input type = "checkbox" name = "checkme" value = "1">
- =end
- # 设置单选框
- ie.radio(:name, "clickme").set
- ie.radio(:name=>'clickme', :index=>2).set
- ie.radio(:name, "clickme", "1").set # 使用name和id属性设置单选框
- # 使用name属性清除单选框
- ie.radio(:name, "clickme").clear
- ie.radio(:name, "clickme", "1").clear # 使用name和id属性清除单选框
- =begin
- 对应的HTML代码为:
- <input type = "radio" name = "clickme" id = "1">
- <input type = "radio" name = "clickme" id = "2">
- =end
- # 设置下拉框
- ie.select_list(:name, "selectme").select('Python') # 使用text属性和值来设置下拉框
- ie.select_list(:name, "selectme").select_value('2') # 使用value属性和值来设置下拉框
- # 使用name属性和值来清除下拉框
- ie.select_list(:name, "selectme").clearSelection
- =begin
- 对应的HTML代码为:
- <select name = "selectme">
- <option value = 1>Ruby
- <option value = 2>Java
- <option value = 3>Python
- <option value = 4>C
- </select>
- =end
- # 文本的框设置
- ie.text_field(:name, "typeinme").set("Watir World")
- # 清空文本输入框
- ie.text_field(:name, "typeinme").clear
- =begin
- 对应的HTML代码为:
- <input type = "text" name = "typeinme">
- =end
- # 通过值或name属性点击button
- ie.button(:value, "Click Me").click
- ie.button(:name, "clickme").click
- =begin
- 对应的HTML代码为:
- <input type = "button" name = "clickme" value = "Click Me">
- =end
- # 通过值或name属性点击Submit
- ie.button(:value, "Submit").click
- ie.button(:type, "Submit").click
- ie.button(:name, "Submit").click
- =begin
- 对应的HTML代码为:
- <form. action = "submit" name = "submitform" method="post">
- <input type = "submit" value = "Submit">
- </form>
- =end
- # 表单中的图片按钮
- ie.button(:name, "doit").click
- =begin
- 对应的HTML代码为:
- <form. action = "submit" name = "doitform" method="post">
- <input type="image" src = "images/doit.gif" name = "doit">
- </form>
- =end
- # 没有按钮的表单
- ie.form(:name, "loginform").submit # 通过name,action以及method属性来提交表单
- ie.form(:action, "login").submit
- =begin
- 对应的HTML代码为:
- <form. action = "login" name = "loginform" method="get">
- <input name="username" type="text">
- </form>
- =end
- # 框架
- ie.show_frames #可以打印出当前页面框架的数量和名称
- # Watir允许通过名称属性来访问框架
- ie.frame("menu")
- # 如果要访问menu框架中的一个超链接,可以
- ie.frame("menu").link(:text, "Click Menu Item").click
- # 嵌套框架
- ie.frame(:name, "frame1").form(:name, 'form1')
- # 新窗口
- # 一些Web应用会弹出新窗口或打开一个新窗口,可以使用attach方法来访问并控制新窗口。通过标示新窗口的URL或者title来访问。
- ie2 = Watir::IE.attach(:url, 'http://www.text.com/')
- ie3 = Watir::IE.attach(:title, 'Test New Window')
- # 也可以使用正则表达式
- ie4 = Watir::IE.attach(:title, /Test New/)
- # 注意:不要把新窗口分配到你的ie变量,最好给新窗口一个不同的名字
- # 访问Table元素:
- t = $ie.table(:id,"data")
- t = Table.new($ie,:id,"data")
- t = $ie.table[1]
- # tr,td元素
- tr = ie.row(:id,"title")
- tr = TableRow.new(ie,:id,"title")
- td = ie.cell(:id,"name")
- td = TableCell.new(ie,:id,"name")
- # Watir中Table,TableBody,TableRow,TableCell这几个类,都提供了一个索引方法"[](index)"来定位其下一层的子元素对象,该方法为实例方法,"index"为传入的参数,索引值从1开始,而非从0开始。
- # 用法如下:
- # 以table的第一行,第一个元素为例:
- tr1 = t.[](1)
- td1 = tr1.[](1)
- # 也可以连续访问:td1 = t.[](1).[](1)
- # 如果td中还有其他元素,可以通过td的实例方法直接访问,以checkbox为例:
- cb = td1.checkbox(:id,'navigate_id').click
- =begin
- 对于以上所提到的对象,都是从Element继承而来,所以click,enabled?,exists?,fireEvent,flash,focus等方法都直接可以使用。
- 如果你的td元素定位准确了,且鼠标响应事件没有错误的话,那么应该能看到点击后的效果。
- 建议多查一下Watir的API Reference http://wtr.rubyforge.org/rdoc/
- =end
- # 代码如下:
- t = ie.table(:id,"CoolMenu2menutable")
- td_logout=t.[](1).[](16)
- # 先找到Table,再索引TR,再索引到TD
- # 运行Ruby时不显示browser方法
- # 运行Ruby程序文件时在后面加 "-b"
- # ex:
- test.rb -b
- # 也可以做成.bat文件
- ex: test.bat
- ruby.exe test.rb -b
- # 获取隐含对象值
- # <INPUT type=hidden value="您的Email" name="field1">
- values = ie.hidden(:name, 'field1').value
- # 获取窗口对象
- # 方法1:
- ie2 = Watir::IE.attach(:url,'http://www.google.cn/') #根据URL获取
- # 方法2:
- ie3 = Watir::IE.attach(:title,'Google') #根据窗口标题获
- # 方法3:
- ie4 = Watir::IE.attach(:title, /google.cn/) #正则表达式匹配获取
# 使用Watir工具,需要在脚本中加上 require 'watir' # 创建一个IE的实例 ie = Watir::IE.new # 或者在创建的同时直接转到页面 ie = Watir::IE.start('http://www.text.com/') # Watir使用start方法同时创建一个浏览器实例并转到一个页面。 # IE浏览速度 ie.speed = :fast ie.speed = :slow # 页面导航 ie.goto('http://www.text.com/') # 注: ie.goto还可以运行javascript的代码如: ie.goto("javascript. ie.document.write("Hello World");") # 取得当前网页的网址 ie.url # 点击超链接 ie.link(:text , "Pickaxe").click ie.link(:href, /http:\/\/pragmaticprogrammer\.com/).click ie.link(:name => 'foo', :index => 1).click # 超链接的uri ie.link(:text , "Pickaxe").href ie.link(:index, 1).href ie.link(:text => "reply", :index => 2).href # 超链接的文本 ie.link(:href , /http:\/\/pragmaticprogrammer\.com/).text =begin 对应的HTML代码为: <a href='http://pragmaticprogrammer.com/titles/ruby/'>Pickaxe</a> =end # img标签 ie.image(:name, 'image').src ie.image(:index, 2).src =begin 对应的HTML代码为: <img name = img src='http://pragmaticprogrammer.com/titles/ruby/top.gif'> <img name = img src='http://pragmaticprogrammer.com/titles/ruby/head.gif'> =end # 设置复选框 ie.checkbox(:name, "checkme").set ie.checkbox(:name, "checkme", "1").set # 使用name和value属性设置复选框 # 清除复选框 ie.checkbox(:name, "checkme").clear ie.checkbox(:name, "checkme", "1").clear # 使用name和value属性清除复选框 =begin 对应的HTML代码为: <input type = "checkbox" name = "checkme" value = "1"> =end # 设置单选框 ie.radio(:name, "clickme").set ie.radio(:name=>'clickme', :index=>2).set ie.radio(:name, "clickme", "1").set # 使用name和id属性设置单选框 # 使用name属性清除单选框 ie.radio(:name, "clickme").clear ie.radio(:name, "clickme", "1").clear # 使用name和id属性清除单选框 =begin 对应的HTML代码为: <input type = "radio" name = "clickme" id = "1"> <input type = "radio" name = "clickme" id = "2"> =end # 设置下拉框 ie.select_list(:name, "selectme").select('Python') # 使用text属性和值来设置下拉框 ie.select_list(:name, "selectme").select_value('2') # 使用value属性和值来设置下拉框 # 使用name属性和值来清除下拉框 ie.select_list(:name, "selectme").clearSelection =begin 对应的HTML代码为: <select name = "selectme"> <option value = 1>Ruby <option value = 2>Java <option value = 3>Python <option value = 4>C </select> =end # 文本的框设置 ie.text_field(:name, "typeinme").set("Watir World") # 清空文本输入框 ie.text_field(:name, "typeinme").clear =begin 对应的HTML代码为: <input type = "text" name = "typeinme"> =end # 通过值或name属性点击button ie.button(:value, "Click Me").click ie.button(:name, "clickme").click =begin 对应的HTML代码为: <input type = "button" name = "clickme" value = "Click Me"> =end # 通过值或name属性点击Submit ie.button(:value, "Submit").click ie.button(:type, "Submit").click ie.button(:name, "Submit").click =begin 对应的HTML代码为: <form. action = "submit" name = "submitform" method="post"> <input type = "submit" value = "Submit"> </form> =end # 表单中的图片按钮 ie.button(:name, "doit").click =begin 对应的HTML代码为: <form. action = "submit" name = "doitform" method="post"> <input type="image" src = "images/doit.gif" name = "doit"> </form> =end # 没有按钮的表单 ie.form(:name, "loginform").submit # 通过name,action以及method属性来提交表单 ie.form(:action, "login").submit =begin 对应的HTML代码为: <form. action = "login" name = "loginform" method="get"> <input name="username" type="text"> </form> =end # 框架 ie.show_frames #可以打印出当前页面框架的数量和名称 # Watir允许通过名称属性来访问框架 ie.frame("menu") # 如果要访问menu框架中的一个超链接,可以 ie.frame("menu").link(:text, "Click Menu Item").click # 嵌套框架 ie.frame(:name, "frame1").form(:name, 'form1') # 新窗口 # 一些Web应用会弹出新窗口或打开一个新窗口,可以使用attach方法来访问并控制新窗口。通过标示新窗口的URL或者title来访问。 ie2 = Watir::IE.attach(:url, 'http://www.text.com/') ie3 = Watir::IE.attach(:title, 'Test New Window') # 也可以使用正则表达式 ie4 = Watir::IE.attach(:title, /Test New/) # 注意:不要把新窗口分配到你的ie变量,最好给新窗口一个不同的名字 # 访问Table元素: t = $ie.table(:id,"data") t = Table.new($ie,:id,"data") t = $ie.table[1] # tr,td元素 tr = ie.row(:id,"title") tr = TableRow.new(ie,:id,"title") td = ie.cell(:id,"name") td = TableCell.new(ie,:id,"name") # Watir中Table,TableBody,TableRow,TableCell这几个类,都提供了一个索引方法"[](index)"来定位其下一层的子元素对象,该方法为实例方法,"index"为传入的参数,索引值从1开始,而非从0开始。 # 用法如下: # 以table的第一行,第一个元素为例: tr1 = t.[](1) td1 = tr1.[](1) # 也可以连续访问:td1 = t.[](1).[](1) # 如果td中还有其他元素,可以通过td的实例方法直接访问,以checkbox为例: cb = td1.checkbox(:id,'navigate_id').click =begin 对于以上所提到的对象,都是从Element继承而来,所以click,enabled?,exists?,fireEvent,flash,focus等方法都直接可以使用。 如果你的td元素定位准确了,且鼠标响应事件没有错误的话,那么应该能看到点击后的效果。 建议多查一下Watir的API Reference http://wtr.rubyforge.org/rdoc/ =end # 代码如下: t = ie.table(:id,"CoolMenu2menutable") td_logout=t.[](1).[](16) # 先找到Table,再索引TR,再索引到TD # 运行Ruby时不显示browser方法 # 运行Ruby程序文件时在后面加 "-b" # ex: test.rb -b # 也可以做成.bat文件 ex: test.bat ruby.exe test.rb -b # 获取隐含对象值 # <INPUT type=hidden value="您的Email" name="field1"> values = ie.hidden(:name, 'field1').value # 获取窗口对象 # 方法1: ie2 = Watir::IE.attach(:url,'http://www.google.cn/') #根据URL获取 # 方法2: ie3 = Watir::IE.attach(:title,'Google') #根据窗口标题获 # 方法3: ie4 = Watir::IE.attach(:title, /google.cn/) #正则表达式匹配获取
目前已知Watir在处理JS弹出窗口时比较麻烦,但也有详细的解决办法(麻烦),处理其他EB应用绰绰有余!
以下处理弹出窗口的方法转载自FreeMyMind的Blog
如果不需要对弹出窗口做条件处理,那么直接用send_keys模拟alt+f4操作即可;但如果需要做条件处理,那么就需要用到一个类WindowHelper(WindowHelper.rb),其中提供处理各种弹出窗口的方法,直接使用即可,如:
- def push_security_alert_yes
- @autoit.WinWait "Security Alert", ""
- @autoit.Send "{TAB}"
- @autoit.Send "{TAB}"
- @autoit.Send "{SPACE}"
- end
def push_security_alert_yes @autoit.WinWait "Security Alert", "" @autoit.Send "{TAB}" @autoit.Send "{TAB}" @autoit.Send "{SPACE}" end
这就是一个模拟点击安全警告“yes”按钮的方法。不过需要注意的是在中文环境下这个类中的方法是不能直接使用的,因为它是默认支持英文环境的,所以是找不到中文标题的窗口的,故需要对方法做本地化处理,如下:
- def push_security_alert_yes
- @autoit.WinWait "安全警告", ""
- @autoit.Send "{TAB}"
- @autoit.Send "{TAB}"
- @autoit.Send "{SPACE}"
- end
def push_security_alert_yes @autoit.WinWait "安全警告", "" @autoit.Send "{TAB}" @autoit.Send "{TAB}" @autoit.Send "{SPACE}" end
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | ||||||
5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
12 | 13 | 14 | 15 | 16 | 17 | 18 | |||
19 | 20 | 21 | 22 | 23 | 24 | 25 | |||
26 | 27 | 28 | 29 | 30 | 31 |
我的存档
数据统计
- 访问量: 10250
- 日志数: 15
- 图片数: 1
- 建立时间: 2011-04-08
- 更新时间: 2012-07-12