Selenium WebDriver + Grid2 + RSpec之旅(五)---面向对象设计用例
2013-11-16 17:29
435 查看
Selenium WebDriver + Grid2 + RSpec之旅(五)
----面向对象设计用例
前几节讲了怎么一步一步的从零开始到编写出一个简单的测试用例,这一节将要讲一下怎么让测试用例变得健壮,易阅读,易维护。那就是通过面向对象的方式,再加上逻辑和数据分离的方式来处理,这个才是自动化测试的核心思想。设计思路
设想对登录进行手工测试,会想到一些测试用例(验证错误的用户名正确的密码;用户名和密码为空直接点击登陆按钮。等等),如果每个用例都要写一套代码的话,会发现有些地方出现代码重复,不利于测试代码的维护。进一步研究发现, 有些测试对象也是可以复用的,比如在登陆的时候我们会用到密码输入框、点击登录按钮等,可以把这些“基本动作”封装到一个类中,这样代码的灵活性和适用性 将会更强。即,面向对象编程。因此对测试目录结构做了一些调整:
新建一个文件夹tool,用来定义一些获取控件的方法
新建一个文件夹action,用来定义一下页面操作的方法
新建一个文件夹spec,用来存放测试用例
新建一个文件夹config,用来存放测试用例所涉及到的测试数据
对于测试数据的管理,采用yaml来管理
1、在我们的工作目录下创建文件夹Login_Page (表示这个是一个登录页面的测试)
2、在Login_Page下分别创建文件夹tool,action,spec,config
3、action文件夹中新建文件login_page.rb
4、config文件夹中新建文件login_data.yml
5、spec文件夹中新建文件login_cnblogs_spec.rb
6、tool文件夹中新建文件login_dialog.rb
测试代码编写
1、login_data.yml中代码如下:data: mainpage: huburl: http://localhost:4444/wd/hub url: http://passport.cnblogs.com/login.aspx title: 用户登录 - 博客园用户中心 logindata: wrong: username: gqou password: 123456 message: 用户名或密码错误
2、login_dialog.rb中代码如下
#encoding:utf-8 require 'selenium-webdriver' module Login_Dialog def get_username @dr.find_element(:id,'tbUserName') end def get_passwd @dr.find_element(:id,'tbPassword') end def get_submit @dr.find_element(:name,'btnLogin') end def get_message @dr.find_element(:id,'Message') end end
3、login_page.rb中代码如下:
#encoding:utf-8 require 'selenium-webdriver' require File.dirname(__FILE__)+'/../tool/login_dialog' class Login_Page include Login_Dialog def initialize(dr) @dr ||= dr end def login(username,passwd) get_username.send_keys(username) get_passwd.send_keys(passwd) get_submit.click end def message get_message.text end end
4、login_cnblogs_spec.rb中代码如下
#encoding:utf-8 require 'selenium-webdriver' require 'rspec' require 'yaml' require File.dirname(__FILE__)+'/../tool/login_dialog' require File.dirname(__FILE__)+'/../action/login_page' describe 'cnblogs main login page' do include Login_Dialog before (:all) do @data = YAML.load (File.open(File.dirname(__FILE__)+'/../config/login_data.yml')) end before (:each) do @dr = Selenium::WebDriver.for(:remote,:url => @data["data"]["mainpage"]["huburl"],:desired_capabilities => :firefox) @dr.navigate.to @data["data"]["mainpage"]["url"] @dr.manage.window.maximize() @driver = Login_Page.new(@dr) end after (:each) do @dr.quit end context 'input the wrong passwd' do it 'login failed,and return "用户名或密码错误"' do @driver.login(@data["data"]["logindata"]["wrong"]["username"],@data["data"]["logindata"]["wrong"]["password"]) expect(@driver.message).to eql (@data["data"]["logindata"]["wrong"]["message"]) end end end
5、打开DOS窗口,切换到Login_Page目录下执行命令rspec -f doc,或者进入到spec目录下执行命令 rspec login_cnblogs_spec.rb -f doc
6、如果想要输出报告为html格式的话,只需要修改格式参数就可以了, rspec login_cnblogs_spec.rb -fh -o result.html,可以尝试一下哦!
7、OK,一条相对完美的用例产生了,并且成功运行。下一章节会讲解一下多浏览器的并行处理。
相关文章推荐
- core--线程池
- 走进C++程序世界----类型转换运算符
- Android Dalvik虚拟机初识
- C#索引器
- Windows Server 2008安装Memcached笔记
- Linux软链接和硬链接
- 基础
- 给青年人的勉励
- MySQL更新表时 Error Code: 1175. You are using safe update mode and you tried to update a table......
- unicode utf-8 字符编解码
- 蓝桥杯2013试题-java梅森素数
- jquery 简单的跨域取数据
- 机房收费系统之结账
- hdu3336 Count the string kmp+dp
- 电脑出了问题要怎么样修复
- Ubuntu 12.04和Windows 7双系统的安装方法
- scheme递归
- ScrollView 和 ListView 冲突解决方案
- Apache rewrite的重写相关的参数说明
- H.264 RTP PAYLOAD 格式