亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Watir
Watir Webdriver的Page Object應用
作者:網絡轉載 發布時間:[ 2014/2/7 16:04:36 ] 推薦標簽:Watir Webdriver Object

如何去創建一個Page Object,下面有一些建議:

盡量給每一個page頁面創建一個Page Object
如果一個頁面包含過多的業務邏輯,你可以考慮將它創建為多個Page Object
把element的詳細處理都封裝起來
對于測試代碼里,永遠不要直接去操作element對象,或者操作browser。
如果使用Rspec或者Cucumber,在define_step里,不要有直接操作的代碼
Page Object的目標是當頁面發生變化是,你不需要去修改測試代碼,而是修改后面的object層
不要在Page Ojbect中包含Assertion,斷言應該仍在在代碼層實現

我們來討論一個實例:


browser = Watir::Browser.new
browser.goto "http://example.com/login"

browser.text_field(:name => "user").set "Mom"
browser.text_field(:name => "pass").set "s3cr3t"
browser.button(:id => "login").click

Watir::Wait.until { browser.title == "Your Profile" }
browser.div(:id => "logged-in").should exist

這是一個簡單的例子,完全按照workflow去操作一個個element對象

如果將其Page Object化,那么看其起來是這個樣子的:

site = Site.new(Watir::Browser.new)

login_page = site.login_page.open
user_page = login_page.login_as "Mom", "s3cr3t"

user_page.should be_logged_in

請注意一下對應關系


為了實現Page Obejcts化,我們需要將詳細的步驟,封裝起來:

class BrowserContainer
  def initialize(browser)
    @browser = browser
  end
end

class Site < BrowserContainer
  def login_page
    @login_page = LoginPage.new(@browser)
  end

  def user_page
    @user_page = UserPage.new(@browser)
  end

  def close
    @browser.close
  end
end # Site

class LoginPage < BrowserContainer
  URL = "http://example.com/login"

  def open
    @browser.goto URL
    self
  end

  def login_as(user, pass)
    user_field.set user
    password_field.set pass

    login_button.click

    next_page = UserPage.new(@browser)
    Watir::Wait.until { next_page.loaded? }

    next_page
  end

  private

  def user_field
    @browser.text_field(:name => "user")
  end

  def password_field
    @browser.text_field(:name => "pass")
  end

  def login_button
    @browser.button(:id => "login")
  end
end # LoginPage

class UserPage < BrowserContainer
  def logged_in?
    logged_in_element.exists?
  end

  def loaded?
    @browser.title == "Your Profile"
  end

  private

  def logged_in_element
    @browser.div(:id => "logged-in")
  end
end

從上面代碼可以看出,Page Objects化之后,我們的測試代碼都是按照封裝好的去書寫,例如,將手工測試用例map到自動化測試步驟(Cucumber),在代碼更迭之后,我們只需要去修改后面封裝的對應代碼,從而避免如下的問題發生:

1. 漏掉一部分代碼沒有更新
2. 更新錯誤
3. 打亂了原有的代碼結構
4. 重復代碼過多
5. 定位錯誤困難

當完成Page Object化之后,跟其他的工具集成很簡單了,例如,在cucumber中我們可以在初始化測試環境中加入一段代碼:

require "watir-webdriver"
require "/path/to/site"

module SiteHelper
  def site
    @site ||= (
      Site.new(Watir::Browser.new(:firefox))
    )
  end
end

World(SiteHelper)

這樣,得到一個更加合理優化的代碼結構。

而且匹配過程變更加清晰明了:

 Given /I have successfully logged in/ do
   login_page = site.login_page.open

   user_page = login_page.login_as "Mom", "s3cr3t"
   user_page.should be_logged_in
 end

上一頁12下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 五月婷婷中文字幕 | 草逼视频免费观看 | 91香蕉视频破解版 | 久久久久久久99精品免费观看 | 野花的视频在线观看免费高清 | 在线观看91精品国产入口 | 午夜成a人片在线观看 | 大尺度激烈叫床视频免费 | 玖玖爱zh综合伊人久久 | 久久精品视频5 | 亚洲影音先锋看看 | 高清在线亚洲精品国产二区 | 日本三级a | 精品国产影院 | 免费成人激情视频 | 久久综合一区二区 | 三级色网站 | 午夜免费视频观看在线播放 | 91热久久免费频精品动漫99 | 欧美性猛交xxx嘿人猛交 | 丝瓜色板 | 国产麻豆精品一区二区 | 国产一二三区在线观看 | 中文字幕一精品亚洲无线一区 | 99视频污在线观看 | 婷婷色婷婷 | 精品视频一区二区三区四区 | ww久久| 亚洲综合久久伊人热 | 亚洲欧美91 | 日韩精品网址 | 国产69精品久久久久9999 | 精品女同一区二区三区在线观看 | 亚洲视屏在线 | 在线视频日韩欧美 | 久久99精品国产麻豆婷婷 | 看中国国产一级毛片真人视频 | 国产大片视频免费观看 | 成人精品视频在线观看播放 | 国产在线视频一区二区三区 | 国产男女猛烈无遮档免费视频网站 |