Watir自动化常用知识点

本文介绍了Ruby语言中的异常处理机制及其实现方法,并详细展示了如何利用Watir库实现Web自动化测试,包括页面导航、元素操作等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、Ruby异常处理

begin #开始

 raise.. #抛出异常

rescue [ExceptionType = StandardException] #捕获指定类型的异常缺省值是StandardException

 $! #表示异常信息

 $@ #表示异常出现的代码位置

else #其余异常

ensure #不管有没有异常,进入该代码块
end #结束

-----------------------------------

可以结合$!错误原因,和$@错误位置做一个错误捕获并提示的小程序,比如

-----------------------------------

begin
    puts 
    puts "file: #{name = ARGV.shift}"
    file = open(name)
    i = 0
    file.read.each_line{|line| puts "#{i+=1}.#{line}" }
    puts
rescue
    puts "error:#{$!} at:#{$@}"
ensure
    file.close
end


------------------------------------

上面的小程序读入一个指定的文件并加入行号进行输出,当产生错误时会输出错误信息以及提示,可以故意输入一个不存在的文件名。

 

其实begin相当于c#的try

rescue相当于c#的catch

ensure相当于c#的finaly

raise相当于c#的throw

2、Ruby中获取文件路径

 

  获取当前的文件名称:     puts   __FILE__  

  获取当前文件的目录名称:      puts File.dirname(__FILE__)

  获取当前文件的完整名称:

     当要获取完整的路径时需要require 'pathname',代码如下:

     require ‘pathname’

     puts Pathname.new(__FILE__).realpath  

获取当前文件的完整目录

     require ‘pathname’

     putsPathname.new(File.dirname(__FILE__)).realpath

输出当前引用的路径:

        puts $:

3、基础操作

# 创建一个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



对应的HTML代码为:

<ahref='http://pragmaticprogrammer.com/titles/ruby/'>Pickaxe</a>


# img标签

ie.image(:name, 'image').src
ie.image(:index, ie.image(:name, 'image').src
ie.image(:index, 2).src2).src



对应的HTML代码为:

<img name = imgsrc='http://pragmaticprogrammer.com/titles/ruby/top.gif'>

<img name = imgsrc='http://pragmaticprogrammer.com/titles/ruby/head.gif'>


# 设置复选框

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属性清除复选框


 

对应的HTML代码为:

<input type= "checkbox" name = "checkme" value = "1">


# 设置单选框

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属性清除单选框

 

对应的HTML代码为:

<input type = "radio" name ="clickme" id = "1">

<input type = "radio" name ="clickme" id = "2">


# 设置下拉框

ie.select_list(:name,"selectme").select('Python') # 使用text属性和值来设置下拉框

ie.select_list(:name,"selectme").select_value('2') # 使用value属性和值来设置下拉框

 

# 使用name属性和值来清除下拉框

ie.select_list(:name,"selectme").clearSelection


对应的HTML代码为:

<select name = "selectme">

<option value = 1>Ruby

<option value = 2>Java

<option value = 3>Python

<option value = 4>C

</select>


# 文本的框设置

ie.text_field(:name,"typeinme").set("Watir World")


# 清空文本输入框

ie.text_field(:name,"typeinme").clear


对应的HTML代码为:

<input type = "text" name ="typeinme">


# 通过值或name属性点击button

ie.button(:value, "ClickMe").click

ie.button(:name, "clickme").click

 

对应的HTML代码为:

<input type= "button" name = "clickme" value = "ClickMe">


# 通过值或name属性点击Submit

ie.button(:value, "Submit").click

ie.button(:type, "Submit").click

ie.button(:name, "Submit").click

 

对应的HTML代码为:

<form.action = "submit" name = "submitform"method="post">

<input type = "submit" value ="Submit">

</form>

 

# 表单中的图片按钮

ie.button(:name, "doit").click

 

对应的HTML代码为:

<form.action = "submit" name = "doitform"method="post">

<input type="image" src ="images/doit.gif" name = "doit">

</form>

 

# 没有按钮的表单

ie.form(:name,"loginform").submit # 通过name,action以及method属性来提交表单

ie.form(:action, "login").submit

对应的HTML代码为:

<form. action = "login" name ="loginform" method="get">

<input name="username"type="text">

</form>

 

# 框架

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 NewWindow')

也可以使用正则表达式

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

 

对于以上所提到的对象,都是从Element继承而来,所以click,enabled?,exists?,fireEvent,flash,focus等方法都直接可以使用。

如果你的td元素定位准确了,且鼠标响应事件没有错误的话,那么应该能看到点击后的效果。

建议多查一下Watir的API Reference http://wtr.rubyforge.org/rdoc/

 

代码如下:

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

 

# 获取隐含对象值

<INPUTtype=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/)             #正则表达式匹配获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值