HJ3-9.6 page object

PageObject 模式

  • 無法適應(yīng) UI 變化,UI 變化會(huì)導(dǎo)致大量的 case 需要修改
  • 大量的樣板代碼 driver find click
  • 一旦出現(xiàn)非預(yù)期的彈框阻擋就會(huì)失敗
  • 無法清晰表達(dá)業(yè)務(wù)用例場(chǎng)景
  • 做法
    • 以頁面為單位獨(dú)立建模
    • 隱藏實(shí)現(xiàn)細(xì)節(jié)
      -本質(zhì)是面向接口編程
  • 優(yōu)點(diǎn)
    • 減少重復(fù) find click 樣板代碼
    • 易讀性提高
    • 頁面修改不影響測(cè)試用例

PageObject 模式原則解讀

  • 方法意義
    • 用公共方法代表 UI 所提供的功能
    • 方法應(yīng)該返回其他的 PageObject 或者返回用于斷言的數(shù)據(jù)
    • 同樣的行為不同的結(jié)果可以建模為不同的方法
    • 不要在方法內(nèi)斷言
  • 字段意義
    • 不要暴露頁面內(nèi)部的元素給外部
    • 不需要建模 UI 內(nèi)的所有元素
登錄場(chǎng)景
  • 登錄頁面提供 login findPassword 功能
    • Login 類 + login findPassword 方法
  • 登錄頁面內(nèi)的元素有多少并不關(guān)心,隱藏內(nèi)部界面控件
  • 登錄成功和失敗會(huì)分別返回不同的頁面
    • findPassword
    • loginSuccess
    • loginFail
  • 通過方法返回值判斷登錄是否符合預(yù)期

基于 POM 的用例組織結(jié)構(gòu)

  • page:完成對(duì)頁面的封裝
  • testcase:調(diào)用各類 page 完成業(yè)務(wù)流程并進(jìn)行斷言
  • data:配置文件和數(shù)據(jù)驅(qū)動(dòng)
  • utils:其他邊界的功能封裝,可選

編寫用例順序

  • 根據(jù)界面封裝 po 類與方法,實(shí)現(xiàn)暫時(shí)設(shè)置為空
  • 編寫用例,明確 po 里方法的入?yún)?、返回值、斷?/li>
  • 實(shí)現(xiàn) po 內(nèi)的方法,與自動(dòng)化框架開始結(jié)合
  • 調(diào)試
  • 整體類似 TDD 風(fēng)格

框架默認(rèn) po 定位策略的不足

  • UI 的控件定位有復(fù)雜性,需要自定義
    • 動(dòng)態(tài)加載的 UI,可以找到但是位置可能發(fā)生變動(dòng)
    • 動(dòng)態(tài)加載的控件可能會(huì)獲取到最早的默認(rèn)值
    • 動(dòng)態(tài)出現(xiàn)的一些 tips 需要特殊處理
  • 改進(jìn)
    • 自定義 find 方法,更靈活的 find 行為定義封裝
    • 改進(jìn)默認(rèn)的注解
console.log(document.cookie)
echo 'cna=zc0GHlCIP20CAbcOhRwxKLSQ; munb=2212215434282; login_aliyunid_pk=1540126140801737; login_current_pk=1540126140801737; aliyun_lang=zh; ak_user_locale=zh_CN; ak_user_locale=zh_CN; _tb_token_=ee07b575475a1; csg=c8128c7e; t=d29cf1ba5a04a4a3cb850b64c58966cd; aliyun_country=CN; aliyun_site=CN; login_aliyunid_pks=BG+BX25ceeCsvL3k5eEuHYU3buoeLRmlp7TZ0CjwueXDfw=; login_aliyunid=dingtalk_no****; isg=BOvrvvXlCrhFYFaZklVKIZwregnVAP-CGyf5511oxiqB_Ate5dDW08rdUjySXFd6; l=fBMFB7sPPBWpl7FiBOfZFurza779sIRAguPzaNbMi9fP_L5B5hoFW1CN4GT6CnGVFsKwR3knvJt2BeYBc7F-nxv9JQZjEYkmndLHR35..; tfstk=eluM5gDPoJ6SRd7S9AU6RKTrMaKK1OabixQYHre2YJyB1Vp_WZomNJd_kcIOum2nhRET7xHcnAHLQrUtWEmmYx4x6GFtmDDsalHmGCN43xk0HcKpyfG_lrJ-oUL-1FtCbYpJpZWXmra2epLJyfG_lYcuuKjHnsQUww3esowlaehU2QY708laQfht85W8UfyFuZygslqn_JbVu2jPkMSza8_bTI3FciZaOW2RA9-3HGiKmIOHtg5bbWNaeBAhc1raOW4etBjPBlPQsp1..' | awk 'BEGIN{RS="; ";FS="="}{print "driver.manage().addCookie(new Cookie(\""$1"\",\""$2$3"\"));"}'
echo 'cna=zc0GHlCIP20CAbcOhRwxKLSQ; munb=2212215434282; login_aliyunid_pk=1540126140801737; login_current_pk=1540126140801737; aliyun_lang=zh; ak_user_locale=zh_CN; ak_user_locale=zh_CN; _tb_token_=ee07b575475a1; csg=c8128c7e; t=d29cf1ba5a04a4a3cb850b64c58966cd; aliyun_country=CN; aliyun_site=CN; login_aliyunid_pks=BG+BX25ceeCsvL3k5eEuHYU3buoeLRmlp7TZ0CjwueXDfw=; login_aliyunid=dingtalk_no****; isg=BOvrvvXlCrhFYFaZklVKIZwregnVAP-CGyf5511oxiqB_Ate5dDW08rdUjySXFd6; l=fBMFB7sPPBWpl7FiBOfZFurza779sIRAguPzaNbMi9fP_L5B5hoFW1CN4GT6CnGVFsKwR3knvJt2BeYBc7F-nxv9JQZjEYkmndLHR35..; tfstk=eluM5gDPoJ6SRd7S9AU6RKTrMaKK1OabixQYHre2YJyB1Vp_WZomNJd_kcIOum2nhRET7xHcnAHLQrUtWEmmYx4x6GFtmDDsalHmGCN43xk0HcKpyfG_lrJ-oUL-1FtCbYpJpZWXmra2epLJyfG_lYcuuKjHnsQUww3esowlaehU2QY708laQfht85W8UfyFuZygslqn_JbVu2jPkMSza8_bTI3FciZaOW2RA9-3HGiKmIOHtg5bbWNaeBAhc1raOW4etBjPBlPQsp1..' | awk 'BEGIN{RS=";  ";}{print $0}' | grep "=.*=.*"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容