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,一条相对完美的用例产生了,并且成功运行。下一章节会讲解一下多浏览器的并行处理。

Selenium WebDriver + Grid2 + RSpec之旅(五)---面向对象设计用例的更多相关文章

  1. Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例

    Selenium WebDriver + Grid2 + RSpec之旅(四) ----通过RSpec编写测试用例 自动化测试和手工测试一样,是要有测试用例,有检查点和测试结果的,接下来我们通过RSp ...

  2. Selenium WebDriver + Grid2 + RSpec之旅(一)----准备篇

    Selenium WebDriver + Grid2 + RSpec之旅(一)             ----准备篇 前言 在Web 2.0 应用中,在浏览器种类盛行的时代,我们在测试过程中不仅要模 ...

  3. Selenium WebDriver + Grid2 + RSpec之旅(六) ----多浏览器的并行执行

    Selenium WebDriver + Grid2 + RSpec之旅(六) ----多浏览器的并行执行 由于浏览器的发展,浏览器种类繁多.为了保证系统能在各种浏览器上叱咤风云,减少测试人员的测试工 ...

  4. Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子

    Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...

  5. Selenium WebDriver + Grid2 + RSpec之旅(二)----Grid2的配置

    Selenium WebDriver + Grid2 + RSpec之旅(二) ----Grid2的配置 为什么要使用Selenium-Grid 分布式运行大规模的TestCase 能够通过一个中央节 ...

  6. Selenium (2) —— Selenium WebDriver + Grid2(101 Tutorial)

    Selenium (2) -- Selenium WebDriver + Grid2(101 Tutorial) jvm版本: 1.8.0_65 selenium版本: v2.48.0 (Standa ...

  7. selenium webdriver学习(五)------------iframe的处理(转)

    selenium webdriver学习(五)------------iframe的处理 博客分类: Selenium-webdriver 如何定位frame中元素  有时候我们在定位一个页面元素的时 ...

  8. Selenium Webdriver概述(转)

    Selenium Webdriver https://www.yiibai.com/selenium/selenium_overview.html# webdriver自动化俗称Selenium 2. ...

  9. selenium webdriver (python) 第一版PDF

    前言 如果你是一位有python语言基础的同学,又想通过python+ selenium去实施自动化,那么你非常幸运的找到了这份文档,我也非常荣幸能为你的自动化学习之路带来一丝帮助. 其实,我在sel ...

随机推荐

  1. spring mvc 错误

    No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin  //跨域问题 respons ...

  2. HDU 2809 God of War(DP + 状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 题目大意:给出战神吕布的初始攻击力ATI.防御力DEF.生命值HP.每升一级增加的攻击力In_A ...

  3. PAT_1007 素数对猜想

    今天想更的那道题现在还没A出来.先把下午做的一道题更新了吧.快零点了.无奈啊. 问题描述: 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n&g ...

  4. WEB开发原则

    1.最小权限原则,只允许用户做****,而不是"不允许用户做****"2.浏览器查看的是服务端代码的执行输出的文本,除非服务器有漏洞,否则浏览者无法查看 服务端的ASPX,CS代码 ...

  5. 【转】主从同步出现一下错误:Slave_IO_Running: Connecting

    主从同步出现一下错误: Slave_IO_Running: ConnectingSlave_SQL_Running: Yes 解决方法: 导致lave_IO_Running 为connecting 的 ...

  6. Ubuntu 之旅—— 调整扩展屏分辨率

    打开终端输入 xrandr 得到如下信息 Screen 0: minimum 320 x 200, current 2390 x 768, maximum 8192 x 8192 LVDS conne ...

  7. windows+apache2.2.9+php5.4.41+mysql安装

    安装Apache(D盘根目录下) (1)打开D:\Apache24\conf下httpd.conf 文件,用记事本打开编辑作如下修改并保存. 第37行ServerRoot "c:/Apach ...

  8. openwrt opkg update wget returned 4 wget returned 1

    最近在正捣鼓mt7620芯片的路由器,刷入openwrt Pandora系统以后想装wifidog实现web认证. 我用我自己的一个水星的路由器PPPOE拨号,通过水星的lan口连接网线到我openw ...

  9. [DevExpress]DxValidationProvider分享

    前些日子从研究所临时调回公司,帮忙做另外一个项目的控件验证工作,其实内容非常的简单,就是将用户即将提交至服务器的数据先做一个本地验证,以达到减少服务器压力.提高用户体验的目的. 附上一张图片 这是官方 ...

  10. 使用WMI监控进程启动与结束

    需要添加引用System.Management 代码: static void Main(string[] args) { //创建WQL事件查询,监视进程开启 var qCreate = new W ...