麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種頁面測試方法和頁面測試裝置的制作方法

文檔序號:6438780閱讀:149來源:國知局
專利名稱:一種頁面測試方法和頁面測試裝置的制作方法
技術領域
本發明涉及頁面測試技術,尤其涉及一種頁面測試方法和頁面測試裝置。
技術背景
以動作字(Action Word, AW)為主要特點的第三代軟件測試技術,因其使用方便, 一經推出便取得了巨大的成功。
在這種軟件測試技術中,測試軟件廠商預先為在標準頁面(例如基于超文本標記語言(HyperText Markup Language,HTML)編寫的標準網頁)上執行的每一種標準動作(例如“鼠標左鍵單擊按鈕”或者“鼠標左鍵單擊下拉框”等)定義對應的動作函數。這種動作函數通過對應的動作名稱(例如“鼠標左鍵單擊按鈕”或者“鼠標左鍵單擊下拉框”等)進行標識,其作用并非用于觸發對應的動作,而是用于觸發動作執行后產生的直接結果,該直接結果可稱為動作事件。測試軟件中會維護一動作列表,其中列有通過各自動作名稱標識的各種動作函數。
在測試過程中,這種測試軟件首先提取待測試頁面中的所有頁面元素(例如“按鈕”和“下拉框”等),生成對照表(MAP)。此后,測試人員便可通過在動作列表中選擇動作名稱和在對照表中選擇頁面元素的方式來生成對應的測試語句,以便對針對該頁面元素進行的特定動作(即動作名稱所對應的動作)進行測試。接下來,在加載待測試頁面(目的是使頁面處于工作狀態以便對頁面進行測試)后,測試軟件讀取測試語句,調用其中的動作名稱所對應的動作函數,來觸發對測試語句中的頁面元素執行對應動作后導致的動作事件,獲得最終的動作結果(該動作結果可通過頁面的變化反映出來)并對其進行驗證,得到最終的測試結果。如上文所述,執行動作函數的的作用并非用于觸發對應的動作,而是觸發動作執行后產生的直接結果。
如上文所述,在上述測試過程中,測試人員需要通過選擇動作名稱和頁面元素的方式來生成對應的測試語句。例如,如果測試人員需要對“鼠標左鍵單擊登錄按鈕”這一頁面操作進行測試,則測試人員需要首先選擇“鼠標左鍵單擊按鈕”這一動作名稱,然后選擇 “登錄按鈕”這一頁面元素,以生成對應的測試語句。又例如,如果測試人員需要對“鼠標左鍵單擊性別下拉框”這一頁面操作進行測試,則測試人員需要首先選擇“鼠標左鍵單擊下拉框”這一動作名稱,然后選擇“性別下拉框”這一頁面元素,以生成對應的測試語句。不難發現,測試人員需要同時依據動作類型(例如“鼠標左鍵單擊”)和待測試動作所面向的待測試頁面元素的類型(例如,“登錄按鈕”的類型為“按鈕”,“性別下拉框”的類型為“下拉框”)這兩個參考條件,來選擇對應的動作名稱(例如,“鼠標左鍵單擊按鈕”或者“鼠標左鍵單擊下拉框”)以確定對應的動作函數,而不能僅僅依據動作類型來選擇對應的動作名稱,這是因為針對不同類型的頁面元素,即使動作類型相同,執行動作后觸發的動作事件也很可能是不同的(例如鼠標左鍵單擊“登錄按鈕”可能導致彈出登錄結果界面,而鼠標左鍵單擊“下拉框”可能導致列出可供選擇的選項),因此需要根據頁面元素的類型開發對應的動作函數。這種因頁面元素類型不同而導致的動作函數上的差異,增大了測試軟件的復雜度。一方面,即便對于同一類型的動作,測試軟件廠商也需要根據動作所面向的頁面元素的類型而編寫多個不同的動作函數,因此增大了測試軟件的開發復雜度。另一方面,在選擇動作函數時,測試人員需要根據動作所面向的頁面元素的類型在多個相似的動作函數中進一步選擇所需的動作函數,增大了測試軟件的使用復雜度。發明內容
有鑒于此,實有必要提供一種頁面測試方法,來降低現有測試軟件的開發復雜度和使用復雜度。
同時,提供一種頁面測試裝置,來降低現有測試軟件的開發復雜度和使用復雜度。
根據本發明實施例的一個方面,提供一種頁面測試方法,用于對頁面進行測試,所述方法包括
讀取用于指示頁面元素和測試動作的測試語句;
根據所述頁面的源代碼查找所述頁面元素在所述頁面上的位置;
在所述位置執行所述測試動作;
驗證所述測試動作的執行結果以獲得測試結果。
根據本發明實施例的另一方面,提供一種頁面測試裝置,用于對頁面進行測試,所述裝置包括
讀取模塊,用于讀取用于指示頁面元素和測試動作的測試語句;
查找模塊,用于根據所述頁面的源代碼查找所述頁面元素在所述頁面上的位置;
執行模塊,用于在所述位置執行所述測試動作;
驗證模塊,用于驗證所述測試動作的執行結果以獲得測試結果。
本發明實施例提供的技術方案讀取用于指示頁面元素和測試動作的測試語句,根據頁面的源代碼查找所述頁面元素在所述頁面上的位置,并在所述位置執行所述測試動作,再驗證所述測試動作的執行結果以獲得測試結果。由此可見,本發明實施例無需使用動作函數,而是直接觸發指定的測試動作,因此測試軟件的開發復雜度和使用復雜度均得以降低。


圖1是依據本發明一實施例的頁面測試方法的示范性流程圖2是依據本發明一實施例的頁面測試裝置的示范性邏輯結構示意圖3是依據本發明一實施例的頁面的示范性示意圖。
具體實施方式
圖1是依據本發明一實施例的頁面測試方法100的示范性流程圖。頁面測試方法 100用于對頁面進行測試,其中,該頁面可以是基于HTML編寫的網頁(Web I^age),也可以是軟件界面。
步驟102,讀取用于指示頁面元素和測試動作的測試語句。
步驟104,根據所述頁面的源代碼查找所述頁面元素在所述頁面上的位置。
步驟106,在所述位置執行所述測試動作。
步驟108,驗證所述測試動作的執行結果以獲得測試結果。
本發明實施例提供的技術方案讀取用于指示頁面元素和測試動作的測試語句,根據頁面的源代碼查找所述頁面元素在所述頁面上的位置,并在所述位置執行所述測試動作,再驗證所述測試動作的執行結果以獲得測試結果。由此可見,本發明實施例無需使用動作函數,而是直接觸發指定的測試動作,因此測試軟件的開發復雜度和使用復雜度均得以降低。此外,本發明實施例無需預先提取待測試頁面中的所有頁面元素以生成對照表。
下面就對上述方法100中的各個步驟進行詳細描述。
在具體實現過程中,方法102中提及的測試語句可以是基于預設語句模板輸入的基于自然語言的測試語句,其中,上述語句模板與動作關鍵詞相對應,不同的動作關鍵詞對應不同的語句模板。例如,對于“鼠標左鍵單擊”這一動作關鍵詞,對應的語句模板可采用如下格式
鼠標左鍵單擊+頁面元素
其中+無需輸入。而頁面元素可以是例如但不限于“登錄按鈕”、“性別下拉框”等頁面元素。又例如,對于“輸入”這一動作關鍵詞,對應的語句模板可采用如下格式
在+頁面元素+中+輸入+動作值
其中+無需輸入。區別于上述動作關鍵詞“鼠標左鍵單擊”,動作關鍵詞“輸入” 所對應的語句模板中需要包含動作值,該動作值可以是任何需要輸入的字符,例如數值、符號和字母等之中的至少一種組成的字符串等。不難發現,在基于語句模板輸入的測試語句中,該測試語句所指示的測試動作即為該語句模板所對應的動作關鍵詞所指示的動作。此外,在確定了測試語句中包含的動作關鍵詞之后,即可根據該動作關鍵詞對應的語句模板, 解析出該測試語句所指示的頁面元素和動作值(如果包含動作值的話)。在具體實現過程中,測試動作可包括例如但不限于鼠標左鍵單擊、鼠標右鍵單擊、鼠標左鍵雙擊、鼠標右鍵雙擊、鼠標懸停、鍵盤輸入、滾輪滾動等各種動作。由此可見,相比現有技術中標識動作函數的動作名稱,動作關鍵詞僅為動作類型,而不包括動作所指向的頁面元素的類型。
此外,上述語句模板中提到的頁面元素可以通過頁面元素的內容和類型共同來指示,也可以通過頁面元素的屬性(包含屬性名稱和屬性值)來指示,或者同時通過頁面元素的內容和類型以及頁面元素的屬性來指示,以便更為精確的指示頁面元素。例如,對于“員工編號欄”這一頁面元素來說,在測試語句中,該頁面元素既可以通過該頁面元素的內容和類型即文字“員工編號”和“欄”來指示,也可以通過該頁面元素的屬性名稱例如id、name 等及其對應的屬性值來指示,或者同時通過文字“員工編號”和“欄”以及屬性id或者name 及其對應的屬性值來指示。當測試語句同時包含頁面元素的內容和類型以及屬性名稱及其屬性值時,在測試語句中,語句模板中的該頁面元素可采用如下格式
頁面元素的內容+頁面元素的類型(頁面元素的屬性名稱=屬性值)
其中+無需輸入。例如,對于頁面上的“員工編號欄”這一頁面元素即可寫成員工編號欄(id = staff),其中,員工編號是該頁面元素的內容,欄是該頁面元素的類型,id是該頁面元素的屬性名稱,staff是該頁面元素的屬性值。更為具體的,當在測試語句中使用頁面元素的屬性名稱時,還可將該屬性名稱統一標識為一通用變量,例如通用變量X,該通用變量X既可以是id,也可以是name,還可以是其他屬性名稱。在這種情況下,該頁面元素將通過該通用變量X的值來指示。例如,上述頁面元素“員工編號欄”可寫成X = staff,在這種情況下,該頁面元素即為具有屬性值為staff的頁面元素,無論該屬性值所屬的屬性的屬性名稱是何種屬性名稱。
如上文所述,在基于上述語句模板輸入的基于自然語言的測試語句中,通過動作關鍵詞來指示測試動作,而通過頁面元素的內容和類型來指示頁面元素,或者通過頁面元素的屬性名稱及屬性值來指示頁面元素,又或者同時通過頁面元素的內容和類型以及頁面元素的屬性名稱及屬性值來指示頁面元素。為便于描述,可將測試語句中用于指示頁面元素的信息簡稱為頁面元素指示信息,通過上文描述不難理解,該頁面元素指示信息包括下列信息之中的至少一種
頁面元素的內容和類型;
頁面元素的屬性名稱及屬性值。
即該頁面元素指示信息可以包含頁面元素的內容和類型,也可以包含頁面元素的屬性名稱及屬性值,還可以同時包含頁面元素的內容和類型以及頁面元素的屬性及其屬性值。
此外,在具體實現過程中,上述語句模板可采用正則表達式的方式來實現。例如, 動作關鍵詞“輸入”所對應的正則表達式可以是
在[“‘“](?P<teXt>·*)[“‘ ”][欄框] ([((]( P<X>[\w]*) = ( ? P<v>·*) D)]) ?
([[](( P<index>[\d]+ ? )( P<offset> ([\+\"] [\d]+) ? ))[]]) [欄框] [內中]?輸入[“ 〃 ‘]( P<value>. *)[” “‘]
其中,上述text可代表頁面元素的內容,欄框代表頁面元素的類型為欄或者框,X 代表通用變量,V代表通用變量的值,value為動作值。由此可見,在根據上述正則表達式輸入的測試語句中,頁面元素指示信息同時包含頁面元素的內容和類型以及頁面元素的屬性名稱及屬性值。
由上文所述可知,如果獲知測試語句對應的語句模板,即可從測試語句中解析得到該測試語句所指示的頁面元素。由于語句模板與動作關鍵詞相對應,因此如果獲知測試語句中包含的動作關鍵詞,即可獲知測試語句對應的語句模板。在具體實現過程中,可維護一動作關鍵詞列表,其中列有各種動作關鍵詞。在這種情況下,方法100中的步驟102可具體包括
讀取所述測試語句;
基于動作關鍵詞列表查找包含在所述測試語句中的動作關鍵詞,其中,所述動作關鍵詞用于指示所述測試動作;
根據所述動作關鍵詞對應的語句模板從所述測試語句中提取所述頁面元素,其中,從所述測試語句中提取所述頁面元素又可具體解釋為,提取所述頁面元素的頁面元素指不信息。
此外,方法100中的步驟102還可包括根據所述動作關鍵詞對應的語句模板從所述測試語句中提取與所述測試動作相關聯的動作值。
如上文所述,在方法100的步驟104中,本發明實施例根據所述頁面的源代碼查找所述頁面元素在所述頁面上的位置。具體來說,該位置在可視范圍之內。在具體實現過程中,在對頁面進行測試時,往往需要加載該頁面,即將該頁面的源代碼加載到內存中。如此一來,便可根據加載到內存中的頁面的源代碼來查找所述頁面元素在所述頁面上的位置。 由背景技術可知,現有技術需要加載頁面兩次。第一次加載頁面的目的是提取頁面中的所有頁面元素以生成對照表,第二次加載頁面的目的是使頁面處于工作狀態以便對其進行測試。與現有技術相比,本發明實施例無需預先提取頁面中的所有頁面元素以生成對照表,因此僅需加載一次頁面即可。
在具體實現過程中,方法100的步驟104可具體包括使所述頁面元素出現在可視范圍內;根據所述頁面的源代碼查找所述頁面元素在該頁面元素所屬窗口(window)對象中的位置;根據所述頁面的源代碼查找所述頁面元素所屬窗口對象在所述頁面上的位置; 根據所述頁面的源代碼查找影響所述窗口對象的顯示位置的滾動條的當前滾動位置;依據所述頁面元素在該頁面元素所屬窗口對象中的位置、所述頁面元素所屬窗口對象在所述頁面上的位置和影響所述窗口對象的顯示位置的滾動條的當前滾動位置確定所述頁面元素在所述頁面上的位置。在具體實現過程中,步驟104中的上述步驟可通過下列代碼進行實現
8def getAbsPosition(self, el em):“1荻取指定頁面元素的座標輸入elem-頁面元素返回頁面元素座標[χ, y]說明如果頁面元素不在可視范圍內,會自動將頁面元素移到可視范圍內"’ #返回值 pos =
#先將頁面元素置到可視范圍內 elem. scrolllnto View(False) #準備循環 tempelem = elem#在一個document內部,通過相對位置累加出這個elem相對window的位置 #最后取window的絕對位置,相加即得到elem的絕對位置 while True:#x軸pos
+= tempelem. offsetLeft#y軸pos[l] += tempelem. offsetToplogger.debug("[%d, %d],%s" % (pos
, pos[l], tempelem.tagName)) #到了 BODY,就不能再往后取了,再往后offsetParent就會報錯了 #這里該取window的絕對位置了 if tempelem.tagName == "BODY":curWindow = tempelem.ownerDocument.parentWindow pos
+= curWindow. screenLeft艦的BUG: screenTop屬性不準確,OK,用Windows XP sp3就可以了 #pos[l] += curWindow. screenTop pos[l] += curWindow. screenToplogger. debug("curWindow.screenTop=%d,name=%s"%(curWindow. screenTop, curWindow.location))
logger. debug(McurWindow.parent.screenTop=%d,name=%s"%(curWindow.parent.screenTop, curWindow.parent.location))logger. debug(McurWindow.parent.parent.screenTop=%d,nam e=%s"%(curWindow.parent.parent.screenTop, curWindow.parent.parent.location))logger. debug("curWindow.parent.parent.parent.screenTop 二 %d,name=%s" % (curWindow.parent.parent.parent.screenTop,curWindow.parent.parent.parent.location))logger. debugC'curWindow.parent.parent.parent.parent.screenTopsyoc^namesyos"%(curWindow.parent.parent.parent. parent. screenTop, curWindow.parent.parent.parent.parent.location))logger. debug(McurWindow. top.screenTop=%d,name=%s"%(curWindow.top.screenTop, curWindow.top.location))logger. debug("curWindow.top.frames
. screenTop 二 %d"%curWindow.top.frames
. screenTop)#此時對elem的絕對位置的獲取已經完成,以下是才隊椐滾動條的狀態進行調整。while tempelem:if hasattr(tempelem, 'scrollLeft'): if tempelem.scrollLeft !二 0:logger.debug("在%s上發現滾動條向右偏移%d" % (tempelem.tagName, tempelem. scrollLeft))#scrollLeft是滾動條右向移動的距離 pos
-= tempelem.scrollLeft if hasattr(tempelem, 'scrollTop'): if tempelem.scrollTop != 0:logger.debug(M在%s上發現滾動條向下偏移%d" % (tempelem.tagName, tempelem.scrollTop))#scrollTop是滾動條縱向移動的距離 pos[l] -= tempelem.scrollTop #取其父節點tempelem = tempelem.parentNode break#獲取上一級元素,準備下一次循環 tempelem = tempelem.offsetParent
權利要求
1.一種頁面測試方法,用于對頁面進行測試,其特征在于,所述方法包括讀取用于指示頁面元素和測試動作的測試語句;根據所述頁面的源代碼查找所述頁面元素在所述頁面上的位置;在所述位置執行所述測試動作;驗證所述測試動作的執行結果以獲得測試結果。
2.如權利要求1所述的方法,其特征在于,所述根據所述頁面的源代碼查找所述頁面元素在所述頁面上的位置,具體包括使所述頁面元素出現在可視范圍內;根據所述頁面的源代碼查找所述頁面元素在該頁面元素所屬窗口對象中的位置;根據所述頁面的源代碼查找所述頁面元素所屬窗口對象在所述頁面上的位置;根據所述頁面的源代碼查找影響所述窗口對象的顯示位置的滾動條的當前滾動位置;依據所述頁面元素在該頁面元素所屬窗口對象中的位置、所述頁面元素所屬窗口對象在所述頁面上的位置和影響所述窗口對象的顯示位置的滾動條的當前滾動位置確定所述頁面元素在所述頁面上的位置。
3.如權利要求2所述的方法,其特征在于,所述測試語句中攜帶有用于指示所述頁面元素的頁面元素指示信息,所述查找所述頁面元素在所述頁面上的位置具體包括,根據所述頁面元素指示信息查找所述頁面元素在所述頁面上的位置,其中,所述頁面元素指示信息包含頁面元素的內容和類型,或者所述頁面元素指示信息包含頁面元素的屬性名稱及屬性值,或者所述頁面元素指示信息同時包含頁面元素的內容和類型以及頁面元素的屬性名稱及屬性值。
4.如權利要求3所述的方法,其特征在于,所述讀取用于指示頁面元素和測試動作的測試語句具體包括讀取所述測試語句;基于動作關鍵詞列表查找包含在所述測試語句中的動作關鍵詞,其中,所述動作關鍵詞用于指示所述測試動作;根據所述動作關鍵詞對應的語句模板從所述測試語句中提取所述頁面元素。
5.如權利要求4所述的方法,其特征在于,所述讀取用于指示頁面元素和測試動作的測試語句還包括根據所述動作關鍵詞對應的語句模板從所述測試語句中提取與所述測試動作相關聯的動作值。
6.如權利要求5所述的方法,其特征在于,當找到的動作關鍵詞為輸入時,所述執行所述測試動作具體包括,復制所述動作值并將其粘貼至所述位置。
7.如權利要求6所述的方法,其特征在于,所述方法還包括,顯示采用預設透明度的測試窗口,所述頁面元素在所述頁面上的位置處于所述測試窗口之外,所述測試窗口包含用于顯示所述測試語句的第一子窗口和用于顯示所述測試結果的第二子窗口,其中,在獲得所述測試結果之前,所述測試語句呈現第一色彩;在獲得所述測試結果之后,當所述測試結果為測試成功時,所述測試語句呈現第二色彩,所述測試結果呈現第三色彩;在獲得所述測試結果之后,當所述測試結果為測試失敗時,所述測試語句呈現第四色彩,所述測試結果呈現第五色彩,其中,第一色彩、第二色彩和第四色彩彼此各不相同,第三色彩不同于第五色彩。
8.一種頁面測試裝置,用于對頁面進行測試,其特征在于,所述裝置包括 讀取模塊,用于讀取用于指示頁面元素和測試動作的測試語句;查找模塊,用于根據所述頁面的源代碼查找所述頁面元素在所述頁面上的位置; 執行模塊,用于在所述位置執行所述測試動作; 驗證模塊,用于驗證所述測試動作的執行結果以獲得測試結果。
9.如權利要求8所述的裝置,其特征在于,所述查找模塊具體用于 使所述頁面元素出現在可視范圍內;根據所述頁面的源代碼查找所述頁面元素在該頁面元素所屬窗口對象中的位置; 根據所述頁面的源代碼查找所述頁面元素所屬窗口對象在所述頁面上的位置; 根據所述頁面的源代碼查找影響所述窗口對象的顯示位置的滾動條的當前滾動位置;依據所述頁面元素在該頁面元素所屬窗口對象中的位置、所述頁面元素所屬窗口對象在所述頁面上的位置和影響所述窗口對象的顯示位置的滾動條的當前滾動位置確定所述頁面元素在所述頁面上的位置。
10.如權利要求9所述的裝置,其特征在于,所述測試語句中攜帶有用于指示所述頁面元素的頁面元素指示信息,所述查找模塊具體用于,根據所述頁面元素指示信息查找所述頁面元素在所述頁面上的位置,其中,所述頁面元素指示信息包含頁面元素的內容和類型, 或者所述頁面元素指示信息包含頁面元素的屬性名稱及屬性值,或者所述頁面元素指示信息同時包含頁面元素的內容和類型以及頁面元素的屬性名稱及屬性值。
11.如權利要求10所述的裝置,其特征在于,所述讀取模塊具體用于 讀取所述測試語句;基于動作關鍵詞列表查找包含在所述測試語句中的動作關鍵詞,其中,所述動作關鍵詞用于指示所述測試動作;根據所述動作關鍵詞對應的語句模板從所述測試語句中提取所述頁面元素。
12.如權利要求11所述的裝置,其特征在于,所述讀取模塊還用于根據所述動作關鍵詞對應的語句模板從所述測試語句中提取與所述測試動作相關聯的動作值。
13.如權利要求12所述的裝置,其特征在于,所述執行模塊具體用于,當找到的動作關鍵詞為輸入時,復制所述動作值并將其粘貼至所述位置。
14.如權利要求13所述的裝置,其特征在于,所述裝置還包括顯示模塊,用于顯示采用預設透明度的測試窗口,所述頁面元素在所述頁面上的位置處于所述測試窗口之外,所述測試窗口包含用于顯示所述測試語句的第一子窗口和用于顯示所述測試結果的第二子窗口,其中,在獲得所述測試結果之前,所述測試語句呈現第一色彩;在獲得所述測試結果之后,當所述測試結果為測試成功時,所述測試語句呈現第二色彩,所述測試結果呈現第三色彩;在獲得所述測試結果之后,當所述測試結果為測試失敗時,所述測試語句呈現第四色彩,所述測試結果呈現第五色彩,其中,第一色彩、第二色彩和第四色彩彼此各不相同,第三色彩不同于第五色彩。
全文摘要
本發明實施例提供了一種頁面測試方法和頁面測試裝置,其中頁面測試方法用于對頁面進行測試,該方法包括讀取用于指示頁面元素和測試動作的測試語句;根據所述頁面的源代碼查找所述頁面元素在所述頁面上的位置;在所述位置執行所述測試動作;驗證所述測試動作的執行結果以獲得測試結果。本發明還提供了一種頁面測試裝置。本發明實施例無需使用動作函數,而是直接觸發指定的測試動作,因此測試軟件的開發復雜度和使用復雜度均得以降低。
文檔編號G06F11/36GK102521121SQ20111036765
公開日2012年6月27日 申請日期2011年11月18日 優先權日2011年11月18日
發明者王峰, 繆偉 申請人:華為技術有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 庆城县| 库尔勒市| 明光市| 兴国县| 仁化县| 靖边县| 遵义市| 和田县| 黔南| 延津县| 榆树市| 平陆县| 宝鸡市| 嘉兴市| 崇礼县| 轮台县| 中方县| 鄂托克旗| 赫章县| 河曲县| 海阳市| 伊宁市| 井陉县| 荔浦县| 新源县| 盘锦市| 湘阴县| 昆明市| 清河县| 宁南县| 玉山县| 怀集县| 山丹县| 泸水县| 岫岩| 长春市| 沁源县| 五大连池市| 县级市| 丁青县| 兰州市|