ruby+selenium-webdriver一步一步進行自動化測試------面向對象編程

前一篇文章中寫了一個測試用例,看上去還算不錯。但是代碼的擴展性並不好,假想對登錄進行手動的功能測試,會想到哪些測試用例?(驗證錯誤的用戶名正確的密碼;
用戶名和密碼爲空直接點擊登陸按鈕。等等)是不是每個用例都要寫一套代碼呢?答案肯定是否定的。可以把登錄的功能抽象成一個方法。進一步研究發現,有些測試對象也是可以複用的,比如在登陸的時候我們會用到密碼輸入框、點擊登錄按鈕等,可以把這些“基本動作”封裝到一個類中,這樣代碼的靈活性和適用性將會更強。即,面向對象編程。

因此做如下改造:

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文件中編寫如下代碼

module 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文件中編寫如下代碼

require 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文件中編寫如下代碼:

#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.命令行中輸入命令:

cd D:\test003
rspec -f doc

看到如下結果:

soso login
  should return username and password is wrong

Finished in 8.3 seconds
1 example, 0 failures

運行成功

源代碼下載地址:http://download.csdn.net/detail/janne09/4402265

發佈了33 篇原創文章 · 獲贊 22 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章