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

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

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

基于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").clickie.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")ifedit.exist?()#The highlighted
edit.flash                         ie.text_field(:name,"password").set(pwd)            ie.button(:class, "x-login-submit").click endend

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.setr.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.setc.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.texts= 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"

文件的下载

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

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

Firefoxdownload_directory= "#{Dir.pwd}/downloads"download_directory.gsub!("/", "\\") ifSelenium::WebDriver::Platform.windows?profile=Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.folderList'] = 2 #custom location
profile['browser.download.dir'] =download_directoryprofile['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. 如果你想知道如何处理特定类型的文件,请阅读这篇博文。

Chromedownload_directory= "#{Dir.pwd}/downloads"download_directory.gsub!("/", "\\") ifSelenium::WebDriver::Platform.windows?profile=Selenium::WebDriver::Chrome::Profile.newprofile['download.prompt_for_download'] =falseprofile['download.default_directory'] =download_directoryb= Watir::Browser.new :chrome, :profile => profile

浏览器新窗口

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

browser.window(:title => "annoying popup").use dobrowser.button(:id=> "close").clickend

JS弹出框

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

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

require "watir-webdriver/extensions/alerts"JAVASCRIPT ALERTSbrowser.alert dobrowser.button(:value=> 'Alert').clickend#=> 'the alert message'
JAVASCRIPT CONFIRMSbrowser.confirm(true) dobrowser.button(:value=> 'Confirm').clickend#=> 'the confirm message'
JAVASCRIPT PROMPTbrowser.prompt('hello') dobrowser.button(:value=> 'Prompt').clickend#=> { :message => 'foo', :default_value => 'bar' }

View Code

可选方法

如果你使用上面的方法时遇到了麻烦,你可以自行覆盖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 :chrome10.times dob.goto'http://17test.info'load_secs= b.performance.summary[:response_time]/1000puts"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

View Code

富文本编辑器

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

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

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

CKEditor

require 'watir-webdriver'b=Watir::Browser.new :firefoxb.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 Editorrequire'watir-webdriver'b=Watir::Browser.newb.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

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

  1. 基于python的界面自动化测试-基于Selenium+Python的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  2. WebDriver自动化测试框架详解

    webDriver自动化测试框架详解 一. 简介 WebDriver API相对于Selenium Remote Control API来说,虽然同样是控制浏览器,但它的编程接口更加简洁 WebDri ...

  3. python selenium po_python+selenium基于po模式的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  4. java web典型模块大全_python+selenium基于po模式的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  5. 基于Selenium实现的web自动化测试框架

    目录 一.什么是Selenium? 二.自动化测试框架 三.自动化框架的设计和实现 四.需要改进的模块 五.总结 一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供 ...

  6. 基于Selenium+Python的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  7. python+selenium基于po模式的web自动化测试框架

    目录:导读 一.什么是Selenium? 二.自动化测试框架 三.自动化框架的设计和实现 四.需要改进的模块 五.总结 一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具, ...

  8. 基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)

    目录 一.什么是Selenium? 二.自动化测试框架 三.自动化框架的设计和实现 四.需要改进的模块 五.总结 总结感谢每一个认真阅读我文章的人!!! 重点:配套学习资料和视频教学 一.什么是Sel ...

  9. Ruby+Watir搭建自动化测试框架

    通过一番比较和精选,最终决定使用目前比较流行的Ruby来作为我的自动化测试框架设计的首先测试脚本,加上它的测试工具Watir几乎完美的代替了所谓收费工具QTP,并且有过之而无不及. 下面我们正式开始说 ...

  10. u3d 模版测试 失败_基于Python的HTTP接口自动化测试框架实现

    一.测试需求描述 对服务后台一系列的http接口功能测试. 输入:根据接口描述构造不同的参数输入值 输出:XML文件 二.实现方法 1.选用Python脚本来驱动测试 2.采用Excel表格管理测试数 ...

最新文章

  1. c语言中gets函数可以输入空格吗_C语言中printf和gets函数的实用技巧
  2. RedHat Linux下利用sersync进行实时同步数据
  3. Android开发小问题集
  4. JavaOne 2012:JavaOne技术主题演讲
  5. r语言去除字符串两端多余空格
  6. Docker 外部访问容器Pp、数据管理volume、网络network 介绍
  7. Node.js学习(第一章:Node.js安装方法及模块化理解)
  8. python标准库——time模块
  9. Java的数据结构有那些?
  10. python cpk 计算
  11. 春节期间,哪些信用卡取现不用手续费?
  12. cisco交换机配置方法
  13. NetCore Vue前端实现导出功能及解决导出excel表格无法打开的问题
  14. BP神经网络求解异或算法
  15. 【搬运工】值得一提的生活窍门
  16. Git-回退到指定版本
  17. 联想笔记本电脑w530更换电池的电芯并进行软件重置,不再提示更换电池
  18. 骁龙 820 车用处理器
  19. Python源码学习笔记:Python程序执行过程与字节码
  20. CSS 奇思妙想边框动画

热门文章

  1. yum升级CURL到最新版本的方法,非常好用
  2. Perl 模块 Getopt::Std 和 Getopt::Long
  3. [GIT] warning: LF will be replaced by CRLF问题解决方法
  4. eclipse Maven搭建SSH框架
  5. xml中出现“文档中根元素后面的标记必须格式正确” 的错误
  6. 一个不错的验证码的例子
  7. 人生长途,感受着不断拼搏...
  8. 解决thymeleaf严格html5校验的方法
  9. python模块之random模块
  10. X-006 FriendlyARM tiny4412 u-boot移植之Debug串口用起来