Selenium-webdriver系列教程(8)————使用Page Object设计模式
在进行web前端自动化测试的过程中,Page Object设计模式可以称得上是杀人放火,居家旅行的常备武器。
Page Object将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。举例来说,在没有使用Page Object模式的情况下,脚本可能是这样写的:
require 'rubygems'require 'selenium-webdriver'url = 'www.soso.com'dr = Selenium::WebDriver.for :iedr.navigate.to urlua_links = dr.find_element(:id => 'ua').find_elements(:css => 'a')ua_links[3].clickua_links[3].send_keys(:enter)sleep 2dr.switch_to.frame('login_frame')user = {:name => 'test', :psd => 'test'}dr.find_element(:id => 'u').send_keys(user[:name])dr.find_element(:id => 'p').send_keys(user[:psd])dr.find_element(:id => 'login_button').clicksleep 2dr.closedef login usr, psd dr.find_element(:id => 'u').send_keys(usr) dr.find_element(:id => 'p').send_keys(psd) dr.find_element(:id => 'login_button').clickend
def login_without_usr_psd dr.find_element(:id => 'login_button').clickend
def click_login_btn dr.find_element(:id => 'login_button').clickend# now login_without_usr_psd will like belowdef login_without_usr_psd click_login_btnend# login function will like thisdef login usr, psd dr.find_element(:id => 'u').send_keys(usr) dr.find_element(:id => 'p').send_keys(psd) click_login_btnend
def login usr, psd set_usr usr set_psd psd click_login_btnend
soso_page = Site.new(dr).soso_main_page(url).opensoso_page.login wrong_usr, wrong_psdsoso_page.error_msg.should be_eql('error')base_page.rbclass BrowserContainer def initialize driver @dr = driver endend # BrowserContainerclass Site < BrowserContainer def soso_main_page url @soso_main_page = SosoMainPage.new(@dr, url) end def close @dr.close endend #Siteclass BasePage < BrowserContainer attr_reader :url def initialize dr, url super(dr) @url = url end def open @dr.navigate.to @url self endend #BasePageclass SosoMainPage < BasePage require './login_dialog' include LoginDialog def login usr, psd open_login_dialog to_dialog_frame usr_field.send_keys usr psd_field.send_keys psd login_btn.click end def open_login_dialog login_link.click login_link.send_keys(:enter) sleep 2 end private def ua_links @dr.find_element(:id => 'ua').find_elements(:css => 'a') end def login_link ua_links[3] endend #SosoMainPagelogin_dialog.rb module LoginDialog 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') endend #LoginDialoglogin.rbrequire 'rubygems'require 'selenium-webdriver'require './base_page'dr = Selenium::WebDriver.for :firefoxurl = 'http://www.soso.com'soso_page = Site.new(dr).soso_main_page(url).opensoso_page.login 'test', 'test'