基于Ruby的Watir-WebDriver自动化测试框架

Watir-WebDriver

                      —— 软件测试的自动化时代 QQ群:160409929

支持哪些浏览器?

几乎所有的浏览器: 比如Firefox, Chrome 和IE,除了Safari。

支持网页上哪些元素?

watir-webdriver支持所有的HTML元素

运行模式是什么?

Watir-WebDriver是基于ruby开发web驱动框架

自动化测试框架

根据不同业务开发相应自动化用例,由Ruby测试框架统一调用分析展示。实现出入口统一,工具类封装;降低用例开发复杂度,框架统一管理效验.

页面元素

attribute_value

获取当前控件的属性

Value = ie.link(:id=>‘xxx’).attribute_value("href")

rand_select

随机选择select list中的某一项

ie.select_list(:name=>’’).rand_select

popupwin

点击弹窗上的‘确定’按钮

ie.popupwin.button(:name=>"确定").click

sikuli_image

点击图片控件

ie.sikuli_image(:image=>"1.png").click

ie.sikuli_image(:image=>"1.png;2.png").click#可以指定多张图片来识别

double_click

双击事件

ie .sikuli_image(:image=>"1.png").double_click

right_click

右击事件

exist?

判断用户元素是否存在

edit = ie.text_field(:name,"username")                                            

                            if edit.exist?() 

                                     #The highlighted

                                     edit.flash                         

                                     ie.text_field(:name, "password").set(pwd)            

                                     ie.button(:class, "x-login-submit").click 

                            end

                   end

Text Fields

require ‘watir-webdriver‘

b = Watir::Browser.start ‘bit.ly/watir-webdriver-demo‘

t = b.text_field :id => ‘entry_0‘

t.exists?

t.set ‘your name‘

t.value

Select Lists – Combos

require ‘watir-webdriver‘

b = Watir::Browser.start ‘bit.ly/watir-webdriver-demo‘

s = b.select_list :id => ‘entry_1‘

s.select ‘Ruby‘

s.selected_options

Radios

require ‘watir-webdriver‘

b = Watir::Browser.start ‘bit.ly/watir-webdriver-demo‘

r = b.label(:text => ‘What is ruby?‘).parent.radio :value => ‘A gem‘

r.exists?

r.set

r.set?

Checkboxes

require ‘watir-webdriver‘

b = Watir::Browser.start ‘bit.ly/watir-webdriver-demo‘

c = b.label(:text => ‘What versions of ruby?‘).parent.checkbox :value => ‘1.9.2‘

c.exists?

c.set

c.set?

Buttons

require ‘watir-webdriver‘

b = Watir::Browser.start ‘bit.ly/watir-webdriver-demo‘

btn = b.button :value, ‘Submit‘

btn.exists?

btn.click

Links

require ‘watir-webdriver‘

b = Watir::Browser.start ‘bit.ly/watir-webdriver-demo‘

l = b.link :text => ‘Google Docs‘

l.exists?

l.click

Divs & Spans

require ‘watir-webdriver‘

b = Watir::Browser.start ‘bit.ly/watir-webdriver-demo‘

d = b.div :class => ‘ss-form-desc ss-no-ignore-whitespace‘

d.exists?

d.text

s = b.span :class => ‘ss-powered-by‘

s.exists?

s.text

实例

按钮

?  ie.button(:name=>"",:id=>"",:index=>n,:type=>"").click

?  ie.button(:name=>"",:id=>"",:index=>n,:type=>"").doclick

输入框

?  ie.text_field(:name=>"").set "变量"

?  ie.text_field(:name=>"").value 取text_field值不是用text而是value!

下拉框

?  ie.select_list(:name=>"").select "下拉框值"

?  ie.select_list(:name=>"").select "#1" #表示第一项内容

?  ie.select_list(:name=>"").rand_select

?  ie.select_list(:name=>"").getSelectedItems|getAllContents->返回Array

单选框

?  ie.radio(:id=>"",:name=>"",:index=>n).set(选中当前radio)

?  ie.radio(:id=>"",:name=>"",:index=>n).clear(取消选中当前radio)

ie.div(:class=>"iradio_minimal-blue checked").radios[1]

复选框

?  ie.check_box(:id=>"",:name=>"",:index=>n).set(true|false)(true表示选中,false表示不选中)

?  ie.check_box(:id=>"",:name=>"",:index=>n).clear(取消选中当前checkbox)

链接

?  ie.link(:text=>"").click/doclick

?  ie.link(:text=>"").href(返回当前link指向的链接)

cell (TD标签,用时一般需要先找到上层控件如table、div等)

?  ie.table(:class=>"",:index=>n).cell(:class=>"",:index=>n).text

?  ie.table(:index=>n).rows 行  列 .text (行、列从1开始)

?  ie.div(:class=>"",:index=>n).cell(:class=>"",:index=>n).text

span

?  ie.table(:id=>"").span(:class=>"").text

弹出框

?  ie.popupwin.get_static_text (返回当前提示框的文本)

?  ie.popupwin.button(:name=>"确定").click/doclick (前一个点击按钮必须用doclick)

?  ie.file_dialog(:index=>1/2).set_file(file_path_download,true) (保存文件的弹出窗口)

图片

?  ie.image(:src=>/word3a_nor.gif/).click/doclick

back

后退

ie.back

forward

前进

ie.forward

refresh

刷新页面

ie.refresh

在Watir-WebDriver中处理frame是非常简单的,就跟处理其他页面元素一样:

b.frame(:id => "content_ifr").send_keys "hello world"

文件的下载

最简单最好的处理文件下载对话框的方式就是完全的避免对话框弹出。

可以在代码里告诉浏览器自动的将文件下载到指定目录,然后在测试用例中访问该目录进行验证。

Firefox

download_directory = "#{Dir.pwd}/downloads"

download_directory.gsub!("/", "\\") if Selenium::WebDriver::Platform.windows?

profile = Selenium::WebDriver::Firefox::Profile.new

profile[‘browser.download.folderList‘] = 2 # custom location

profile[‘browser.download.dir‘] = download_directory

profile[‘browser.helperApps.neverAsk.saveToDisk‘] = "text/csv,application/pdf"

b = Watir::Browser.new :firefox, :profile => profile

关于Firefox的所有配置项可以通过在地址栏中输入‘about:config‘进行查看。

If you want to know a way to work out the file types (eg. application/pdf) then you can read the following blog post for an step by step guide. 如果你想知道如何处理特定类型的文件,请阅读这篇博文。

Chrome

download_directory = "#{Dir.pwd}/downloads"

download_directory.gsub!("/", "\\") if  Selenium::WebDriver::Platform.windows?

profile = Selenium::WebDriver::Chrome::Profile.new

profile[‘download.prompt_for_download‘] = false

profile[‘download.default_directory‘] = download_directory

b = Watir::Browser.new :chrome, :profile => profile

浏览器新窗口

当一个新的浏览器窗口打开时,你可以使用‘use‘方法来处理这个新窗口。

browser.window(:title => "annoying popup").use do

  browser.button(:id => "close").click

end

JS弹出框

在web应用中,JavaScript对话框是十分常见的。

Watir-WebDriver内建了处理这些对话框的方法,并且可以返回对话框中显示的内容。首先,加载这个扩展:

require "watir-webdriver/extensions/alerts"

JAVASCRIPT ALERTS

browser.alert do

  browser.button(:value => ‘Alert‘).click

end #=> ‘the alert message‘

JAVASCRIPT CONFIRMS

browser.confirm(true) do

  browser.button(:value => ‘Confirm‘).click

end #=> ‘the confirm message‘

JAVASCRIPT PROMPT

browser.prompt(‘hello‘) do

  browser.button(:value => ‘Prompt‘).click

end #=> { :message => ‘foo‘, :default_value => ‘bar‘ }

可选方法

如果你使用上面的方法时遇到了麻烦,你可以自行覆盖JavaScript functions,这样一来原来应该显示的对话框就可以在触发时不显示了。

# 使alert方法返回空

browser.execute_script("window.alert = function() {}")

# 使prompt返回特定的字符串,用来模拟用户的输入

browser.execute_script("window.prompt = function() {return ‘my name‘}")

# 使prompt方法返回null用来模拟用户点击了Cancel(取消)按钮

browser.execute_script("window.prompt = function() {return null}")

# 使confirm方法返回true用来模拟用户点击了OK(确定)按钮

browser.execute_script("window.confirm = function() {return true}")

# 使confirm方法返回false用来模拟用户点击了Cancel(取消)按钮

browser.execute_script("window.confirm = function() {return false}")

页面性能

Watir-WebDriver-Performance gem 提供在访问页面的同时进行页面性能度量的功能,其使用的是W3C页面性能度量指标。这是一个完美的捕获响应性能指标的解决方案,其使用方法非常直观和简单,不过目前只支持Chrome和IE9l浏览器。

require ‘watir-webdriver‘
require ‘watir-webdriver-performance‘

b = Watir::Browser.new :chrome

10.times do

  b.goto ‘http://17test.info‘

  load_secs = b.performance.summary[:response_time]/1000

  puts "Load Time: #{load_secs} seconds."

end

其统计结果如下:

Load Time: 3.701 seconds.

截屏

Watir-WebDriver内建的截图功能很赞也很好用。

browser.driver.save_screenshot ‘screenshot.png‘

The great thing about this is it gives you a screen shot of the entire page, not just above the fold. 截图功能最棒的地方在于它能捕获到整个页面,而不是屏幕上显示的那部分。

如果你正在使用Cucumber,那么你可以简单的将下面的代码添加到env.rb文件中,这样你可以在html的报告中插入截图:

After do |scenario|

  browser.driver.save_screenshot ‘screenshot.png‘

  embed ‘screenshot.png‘, ‘image/png‘

end

模拟特殊按键

使用.send_keys方法可以模拟特殊的键盘按键(比如shift),其参数是你所需要模拟的按键的符号表示(symbolic)。

b.send_keys :enter

也可以这样做:

b.element.send_keys [:control, ‘a‘], :backspace

你还可以修改click方法的行为,使得点击可以配合按键一起进行:

b.element.click(:shift, :control)

支持的按键键名列表如下:

:null

:cancel

:help

:backspace

:tab

:clear

:return

:enter

:shift

:left_shift

:control

:left_control

:alt

:left_alt

:pause

:escape

:space

:page_up

:page_down

:end

:home

:left

:arrow_left

:up

:arrow_up

:right

:arrow_right

:down

:arrow_down

:insert

:delete

:semicolon

:equals

:numpad0

:numpad1

:numpad2

:numpad3

:numpad4

:numpad5

:numpad6

:numpad7

:numpad8

:numpad9

:multiply

:add

:separator

:subtract

:decimal

:divide

:f1

:f2

:f3

:f4

:f5

:f6

:f7

:f8

:f9

:f10

:f11

:f12

:meta

:command

富文本编辑器

有两种方法可以通过Watir-WebDriver向所见即所得编辑器(应该指的是富文本编辑器)中输入文字:

定位编辑器所在的iFrame,然后使用.send_keys方法(缺点是浏览器必须在前台运行)

在浏览器上执行javascript,通过js脚本去设置编辑器的值

CKEditor

require ‘watir-webdriver‘

b = Watir::Browser.new :firefox

b.goto ‘http://ckeditor.com/demo‘

b.execute_script("CKEDITOR.instances[‘editor1‘].setData(‘hello world‘);")

b.frame(:title => ‘Rich text editor, editor1, press ALT 0 for help.‘).send_keys ‘hello world again‘

TinyMCE Editor

require ‘watir-webdriver‘

b = Watir::Browser.new

b.goto ‘http://tinymce.moxiecode.com/tryit/full.php‘

b.execute_script("tinyMCE.get(‘content‘).execCommand(‘mceSetContent‘,false, ‘hello world‘ );")

b.frame(:id => "content_ifr").send_keys ‘hello world again‘

QA

时间: 2024-08-27 22:48:23

基于Ruby的Watir-WebDriver自动化测试框架的相关文章

基于ruby的watir自动化测试 笔记二

基于ruby的watir自动化测试 笔记一的补充版,新增加了些特殊的控件捕获方法.还在更新中.... attribute_value 获取当前控件的属性 Value = ie.link(:id=>'xxx’).attribute_value("href") rand_select 随机选择select list中的某一项 ie.select_list(:name=>’’).rand_select popupwin 点击弹窗上的‘确定’按钮 ie.popupwin.butto

基于Java+Selenium的WebUI自动化测试框架(四)

基于上一篇的内容,这里我们开始写监听类Listener.我这里写监听类的思路是,继承TestListenerAdapter这个类,然后对其中的方法进行重写.网上也有很多资料,建议先学习一下,然后写出来. package webui.xUtils; import org.openqa.selenium.WebDriver; import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.Reporte

基于Java+Selenium的WebUI自动化测试框架(七)--IE浏览器的设置

在上一篇我们讲了关于WebDriver的版本,浏览器初始化,以及下载的设定. 在设置IE浏览器进行WebDriver的测试时,通常会遇见以下几种错误: 1.没有关闭IE浏览器的保护模式. 当运行测试用例后出现类似以下内容的错误: Exception in thread "main" org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. Prot

基于 SWTBot 进行 Eclipse GUI 自动化测试

背景简介 在软件开发领域,持续集成和部署对于软件测试自动化提出了越来越高的要求,基于 Eclipse 应用在这一需求中仍然占据重要的组成部分.目前主流的测试自动化工具主要以录制回放的功能为主,辅助以脚本的方式实现.然而,基于此的测试方法往往具有测试用例维护复杂,测试过程容易失败的问题,这直接影响了测试效率.SWTBot 作为 Eclipse 官网推荐的自动化测试工具,提供了专业的类库以及扩展点,在 Eclipse 应用的自动化测试中具有先天的优势. SWTBot 是基于 Eclipse SWT

Windows环境搭建Web自动化测试框架Watir(基于Ruby) 第1章

一.前言     Web自动化测试一直是一个比较迫切的问题,对于现在web开发的敏捷开发,却没有相对应的敏捷测试,故开此主题,一边研究,一边将Web自动化测试应用于工作中,进而形成能够独立成章的博文,希望能够为国内web自动化测试的发展做一点绵薄的贡献吧,笑~ 二.Watir搭建流程 图1-1 需要安装的工具     下载地址:http://railsinstaller.org/     因为安装Ruby还需要用到其他的一些开发工具集,所以建议从网站http://railsinstaller.o

Windows环境搭建Web自动化测试框架Watir(基于Ruby)

web自动化测试一直是一个比较迫切的问题 图1-1 需要安装的工具 http://railsinstaller.org/ 因为安装Ruby还需要用到其他的一些开发工具集,所以建议从网站http://railsinstaller.org/ 下载,而且使用该安装包的话,它会帮你把环境变量也设置完毕,我使用的版本是:railsinstaller-2.2.4.exe,建议下载最新版本. 开始安装RailsInstaller工具包,安装到默认位置即可. 这个对勾建议打上,它会帮你配置git和ssh,安装过

Web自动化测试框架Watir(基于Ruby) - 第2章 使用Watir写自动化测试脚本

一.先来看一个小DEMO     通过上一篇博文<Web自动化测试框架Watir(基于Ruby) - 第1章 Windows下安装与部署>的介绍,我们已经有了完整Watir运行环境,现在我们可以来试用一下Watir,来对其进一步了解: 图1-1 测试脚本:测试百度搜索     代码如下: #encoding: utf-8 #测试百度搜索 require 'watir' puts "打开浏览器" browser = Watir::Browser.new sleep 2 #延时

从0到1,教你实现基于Ruby的watir-webdriver自动化测试

一.为什么选择Ruby [1]完全开源. [2]多平台:Ruby可以运行在Linux, UNIX, Windows, MS-DOS, BeOS, OS/2.. [3]多线程:线程就是指在一个程序中处理若干控制流的功能.与OS提供的进程不同的是,线程可以共享内存空间. [4]完全面向对象. [5]不需要内存管理:具有垃圾回收(Garbage Collect, GC)功能,能自动回收不再使用的对象. [6]解释执行:其程序无需编译即可轻松执行. [7]功能强大的字符串操作/正则表达式. [8]具有异

基于Ruby的watir-webdriver自动化测试方案与实施(三)

接着基于Ruby的watir-webdriver自动化测试方案与实施(二) http://www.cnblogs.com/Javame/p/4159468.html 继续 ... ... 编写脚本首先要学会捕获元素,接下来就要学习页面元素的捕获. 页面元素 attribute_value 获取当前控件的属性 Value = ie.link(:id=>'xxx’).attribute_value("href") rand_select 随机选择select list中的某一项 ie