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.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97