Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Automan by Taichan

淘宝页面自动化介绍
by

zile lee

on 20 April 2011

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Automan by Taichan

测试 自動化AutoMan框架剖析及發展 太禪 歷 淘寶頁面自動化的歷歴史 歷 開源框架watir B2B封裝的pwatir 淘寶封裝的tcommon
自動化中用到的底層技術 第二部分:
Windows客端自動化 第一部分:IE自動化
第三部分:
跨瀏覽器自動化
以FireFox爲例 FF插件可以對FF進行控制,也可以對任何FF頁面元素進行操作和修改。
WebDriver是針對FF開發的自動化插件,允許本地程序通過tcp端口與之交互。
WebDriver提供如頁面跳轉,控件査查找,控件操作等一系列操作的tcp接口。
Selenium2.0提供各個語言版本(如java, ruby, C#)的WebDriver調用方式封裝,用于對FF等瀏覽器自動化的支持。 system32下的user32.dll動態鏈接庫提供與user交互,如窗口的創建和發送消息。
在自動化測試中,user32.dll用于進行窗口的查査找和控件的操作(發消息)。
同樣,鼠標鍵盤事件也由user32.dll來控制。
ruby內置了dl類庫,來用加載和調用native dll
使用的時候需要聲明:dll名,方法名,輸入參數個數類型,返回參數個數類型。 我們通過IE的com接口與IE進行交互,包括取值與操作。
Win32ole提供了windows com接口的調用,幷封裝了系統返回的com對象。
Win32ole是ruby內自帶的與windows交互的方式。
Watir對win32ole進行封裝,封裝了很多友好的類,和易于操作的方法。 我們遇到的麻煩 複雜的頁面
VS
難以讀懂的脚本 描述型編程
VS
面向對象編程 描述型編程的思路
--操作名(“如何定位”, “操作參數”)
textedit(sym_type, sym_name, set_value)
ledit(where, what)
ltype(where, what)
tset(page_ole, value)

面向對象編程
--獲取對象+操作對象
ie = IE.open
ie.goto(url)
txt = ie.textedit(how)
txt.set(what)
txt.sendkey(what) 包含Table的頁面
難以讀懂的脚本 如何面向對象?
思考1 定義基礎控件類型
--Button, Radio, TextField... 定義所有Page的一個基類
--用ie實例化
--控制IE的公用方法。
page.wait
page.close
--頁面跳轉,返回子類的實例。
page.goto(“LoginPage”) 定義具體頁面,爲Page的子類
--定義與頁面容相對應的方法
返回inner class的實例
返回基礎控件類型的實例
--定義inner class代表進一層的區域劃分
用Dom節點實例化
返回inner class的實例
返回基礎控件類型的實例 思考2 需要寫的代碼太多,不利于推廣大規模使用,進一步層抽象。 添加BaseElement對象
--用Dom節點實例化
--定義通過xpath找,返回新的BaseElement實例
--所有SubModel都保存一個BaseElement的實例 區分IE與Page,將Page看成一種特殊的SubModel
Page的實例保存Dom根節點<html>
login_page = buy_page.goto(“LoginPage”)
ie.goto(http://xxx)
login_page = ie.cast(“LoginPage”) 對區域劃分(SubModel)進行抽象
--作用:
方便將控件分類
返回數組(可能返回控件數組,也可以返回區域數組)
--在Page子類中定義這些抽象
find_element(type,xpath)
find_model(inner_class,xpath)
find_elements(type,xpath)
find_models(inner_class,xpath) 效果: Page的子類封裝了
區域的劃分
控件的査查找 思考3 進一考慮客端的兼容性。
BaseElement提供控件査找的抽象實現
由AElement和WinElement兩個子類通過重載,分別用各自邏輯實現。
SubModel提供find_elements_by_xpath,調用組合BaseElement的抽象方法實現。
HtmlModel和WinModel做爲SubModel的子類,分別組合AElement和WinElement。 支持更豐富的找方式?JQuery。
增加selector解釋類
SubModel調用解釋類,提供find_elements_by_selector 還有麼? 思考4,優化 規則:編寫xml,通過模板生成UI的代碼
方便:設計頁面PageModel,用于生成xml
共享:xml存DB,運行時從服務器下載,實時加載
速度:本地留版本信息,增量更新 易用性 控件査找引擎 元素基類 IE元素實現 現在的Automan框架 Win32擴展 對旺旺客戶端的自動化支持
getDesktopWindow => GetTopWindow
getChild => EnumChildWindows
clickByHandle => PostMessage
setText => SendMessage
readText => GetWindowTextA
sendkey => AutoIt封裝的sendkey的方法 對FireFox瀏覽器的支持
使用方面要求
脚本不變,通過傳參控制應該啓動的瀏覽器類型
支持不帶參數時,IE和FF可以在脚本中共存
不同的瀏覽器
打開關閉瀏覽器方法不同,跳轉方法不同
査找方式的實現代碼不同
讀取和操作的實現代碼不同 具體實現
--增加FFModel類與IEModel相平行
--增加FModel類與HtmlModel相平行
--定義FElement與AElement平行
--通過ruby的動態特性,加載時判斷-browser參數
--當-browser ff時
加載ff的代碼實現,讓IE=FF
AWatir::IEModel = AWatir::FFModel
AWatir::HtmlModel = AWatir::FModel
AWatir::AElement = AWatir::FElement 多瀏覽器支持 後續發展 一些合作:
基于截圖對比的兼容性自動化
與店鋪綫合作的SDK模板審核平臺
UED合作的前端測試平臺
一些雛形:
Automan頁面拾取功能的實現 http://qa.taobao.com/?p=11889
Mark推廣使用教程 http://qa.taobao.com/?p=11566
脚本生成器http://automan.taobao.net/pm_scripts/new?pm_lib_id=295 http://automan.taobao.net/automan/resource/editor.html 一些想法:(歡迎大家來實現)
充分利用數據準備的積累
運行時收集信息
生成用例運行Step的文案
收集自動化過程中經過的頁面url,自動更新到相應的PageModel
對操作過的SubModel和Element進行截圖,自動上傳到相應的PageModel
運行時對頁面進行無障礙校驗
收集頁面的加載時間,進行對比。 多變的頁面
VS
査找方式固定的脚本 --測試脚本的容
Api使用方式:操作名(“如何定位”, “操作參數”)
脚本定義了模擬user操作的step
脚本定義了控件査找的方式
--使用場景變化=>脚本要改
--控件變化=>脚本要改 豐富的操作方式
VS
難以記憶 豐富的操作方式
--參數的多態
def button(sym_type,sym_name,click_type=nil,index=nil)
button(“id”,”sth”)
button(“id”,”sth”,” doclick”)
button(“id”,”sth”,” doclick”,2)
--方法名多樣
def button(sym_type,sym_name,click_type=nil,index=nil)
def button_exist?(sym_type,sym_name)
def button_do_click(sym_type,sym_name)
--lotus,創新的定位控件方式
--面對難以操作的控件,只有加方法
對表格數據的操作擴展
def click_td(table_sym_type,table_sym_name,rowid,td_index)
click_td("id","J_ListTable","聯通如意通",4) 脚本編寫難度高,大部分同學只能學會找簡單控件
--寫脚本的過程
看下控件有沒有id, class, name等屬性
有屬性的話再看一下是click還是doclick,是type還是edit。
沒有屬性的話,用lotus使用文本找
文本也沒有的話,找自動化組幫忙解决 引入excel數據驅動的方式
在default namespace下添加操作方法,簡化調用方式
豐富的控件定位方式 通過文本找&特定屬性找,通過參數的多態實現。
lotus,通過方法名前面加l來區分。
通過一些相對位置的査找。通過方法名前面加t來區分。 以繼承的watir控件類的方式,進行操作擴展
添加彈出框等操作類
Full transcript