面向?qū)ο缶幊?/p>
用戶(hù)名和密碼為空直接點(diǎn)擊登陸按鈕。等等)是不是每個(gè)用例都要寫(xiě)一套代碼呢?答案肯定是否定的。可以把登錄的功能抽象成一個(gè)方法。進(jìn)一步研究發(fā)現(xiàn), 有些測(cè)試對(duì)象也是可以復(fù)用的,比如在登陸的時(shí)候我們會(huì)用到密碼輸入框、點(diǎn)擊登錄按鈕等,可以把這些“基本動(dòng)作”封裝到一個(gè)類(lèi)中,這樣代碼的靈活性和適用性 將會(huì)更強(qiáng)。即,面向?qū)ο缶幊獭?/p>
因此做如下改造:
1.定義一個(gè)工具類(lèi),此工具類(lèi)定義方法,各個(gè)方法分別用于獲取登錄連接、用戶(hù)名、密碼、登錄按鈕等元素;
2.定義一個(gè)實(shí)現(xiàn)類(lèi),此類(lèi)中定義方法,方法目的是對(duì)獲取的元素進(jìn)行操作(點(diǎn)擊、錄入值等),對(duì)元素的操作組織登錄方法;
3.建立測(cè)試用例進(jìn)行測(cè)試;
改造方法:
1.D盤(pán)下新建test003文件夾
2.test003文件夾下新建三個(gè)文件夾,分別為action、tool、spec。其中action存放實(shí)現(xiàn)類(lèi),tool存放工具類(lèi),spec存放測(cè)試用例
3.action文件夾下新建文件login_main_page.rb;
tool文件夾下新建文件login_dialog.rb;
spec文件夾下新建文件login_spec.rb
4.login_dialog.rb文件中編寫(xiě)如下代碼
?
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文件中編寫(xiě)如下代碼
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文件中編寫(xiě)如下代碼:
#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
begin
@login_element.login("test","test")
err_message.should eql ("您輸入的帳號(hào)或密碼不正確,請(qǐng)重新輸入。意見(jiàn)反饋")
ensure
close_browser
end
end
end
7.命令行中輸入命令:
cd D: est003
rspec -f doc
看到如下結(jié)果:
?
soso login
should return username and password is wrong
Finished in 8.3 seconds
1 example, 0 failures