ruby+selenium自动化测试:面向对象编程

发表于:2012-09-05来源:Csdn作者:janne09点击数: 标签:ruby
前一篇文章中写了一个测试用例,看上去还算不错。但是代码的扩展性并不好,假想对登录进行手动的功能测试,会想到哪些测试用例?(验证错误的用户名正确的密码;

  前一篇文章中写了一个测试用例,看上去还算不错。但是代码的扩展性并不好,假想对登录进行手动的功能测试,会想到哪些测试用例?(验证错误的用户名正确的密码;

  用户名和密码为空直接点击登陆按钮。等等)是不是每个用例都要写一套代码呢?答案肯定是否定的。可以把登录的功能抽象成一个方法。进一步研究发现,有些测试对象也是可以复用的,比如在登陆的时候我们会用到密码输入框、点击登录按钮等,可以把这些“基本动作”封装到一个类中,这样代码的灵活性和适用性将会更强。即,面向对象编程

  因此做如下改造:

  1.定义一个工具类,此工具类定义方法,各个方法分别用于获取登录连接、用户名、密码、登录按钮等元素;

  2.定义一个实现类,此类中定义方法,方法目的是对获取的元素进行操作(点击、录入值等),对元素的操作组织登录方法;

  3.建立测试用例进行测试;

  改造方法:

  1.D盘下新建test003文件夹

  2.test003文件夹下新建三个文件夹,分别为action、tool、spec。其中action存放实现类,tool存放工具类,spec存放测试用例

  3.action文件夹下新建文件login_main_page.rb;tool文件夹下新建文件login_dialog.rb;spec文件夹下新建文件login_spec.rb

  创建的文件结构如下:

  4.login_dialog.rb文件中编写如下代码

  [ruby] view plaincopymodule LoginDialog

  def ua_link

  @dr.find_element(:id,'ua').find_elements(:css,'a')

  end

  def login_link

  ua_link[1]

  end

  def to_dialog_frame

  begin

  @dr.switch_to.frame('login_frame')

  rescue

  raise 'Can not switch to login dialog, make sure the dialog was open'

  exit

  end

  end

  def usr_field

  @dr.find_element(:id => 'u')

  end

  def psd_field

  @dr.find_element(:id => 'p')

  end

  def login_btn

  @dr.find_element(:id => 'login_button')

  end

  def err_message

  @dr.find_element(:id=>'err_m').text

  end

  def close_browser

  @dr.close

  end

  end

  5.login_main_page.rb文件中编写如下代码

  [ruby] view plaincopyrequire File.dirname(__FILE__)+'/../tool/login_dialog'

  class LoginMainPage

  include LoginDialog

  def initialize(dr)

  @dr ||=dr

  end

  def open_login_dialog

  login_link.click

  login_link.send_keys(:enter)

  sleep 2

  end

  def login(username,password)

  open_login_dialog

  to_dialog_frame

  usr_field.send_keys(username)

  psd_field.send_keys(password)

  login_btn.click

  end

  end

  6.login_spec.rb文件中编写如下代码:

  [ruby] view plaincopy#encoding: utf-8

  require "rspec"

  require 'yaml'

  require 'selenium-webdriver'

  require File.dirname(__FILE__)+'/../action/login_main_page'

  require File.dirname(__FILE__)+'/../tool/login_dialog'

  describe "soso login" do

  include LoginDialog

  before(:all) do

  @dr=Selenium::WebDriver.for :firefox

  @url='http://www.soso.com'

  @dr.get @url

  end

  before(:each) do

  @login_element=LoginMainPage.new(@dr)

  end

  it "should return username and password is wrong" do

  @login_element.login("test","test")

  err_message.should eql ("您输入的帐号或密码不正确,请重新输入。意见反馈")

  close_browser

  end

  end

  7.命令行中输入命令:

  [plain] view plaincopycd D:\test003

  rspec -f doc

  看到如下结果:

  [ruby] view plaincopysoso login

  should return username and password is wrong

  Finished in 8.3 seconds

  1 example, 0 failures

原文转自:http://www.ltesting.net