專利名稱:使用戶界面元素可見的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及軟件應(yīng)用程序的測試,尤其涉及確保要測試的圖形用戶界面項的可見性。
背景技術(shù):
在現(xiàn)代世界中,人們依賴于其計算機以及它們所運行的應(yīng)用程序。在工作和家庭生活的幾乎每一方面,人們都依賴于其軟件正確運行。軟件錯誤可導(dǎo)致諸如醫(yī)學(xué)應(yīng)用程序、銀行應(yīng)用程序、飛機和機動車輛控制等許多設(shè)置中的嚴(yán)重問題。
由此,計算機應(yīng)用程序正確地運作是相當(dāng)重要的。為確保這一可靠性,必需測試應(yīng)用程序以確保它們具有盡可能少的錯誤,即“程序缺陷”。在應(yīng)用程序開發(fā)的最初階段,計算機軟件公司將雇傭內(nèi)部的測試者來試圖模擬最終用戶輸入,由此發(fā)現(xiàn)代碼中的問題,這是使用至今的方法。另一常見的測試方法是向顧客現(xiàn)場推出Beta版,這是已知仍包含錯誤的軟件;然后,顧客通過使用該軟件繼續(xù)測試它。然而,內(nèi)部測試和Beta版測試都要求過長的時間段或大量的用戶現(xiàn)場來找出足夠大量的錯誤以產(chǎn)生適當(dāng)?shù)臒o錯誤計算機應(yīng)用程序。為解決這些問題,開發(fā)了自動測試程序,它模擬鍵盤和鼠標(biāo)用戶輸入,并可用于更快速地測試應(yīng)用程序,因為不像人類,它們連續(xù)且飛快地運行。由此,它們可用于更詳盡地測試應(yīng)用程序,從而得到質(zhì)量更高的軟件。
為測試應(yīng)用程序的控件項,仿真鍵盤和鼠標(biāo)數(shù)據(jù)的測試程序必須能夠選擇屏幕上的項。該項至少必須是可見的以使它能夠被選擇。此處,術(shù)語“選擇項”意味著用戶通過鼠標(biāo)、鍵盤或另一輸入設(shè)備與UI元素(項)的交互。
發(fā)明內(nèi)容
如此處所描述的,提供了一種確保用戶界面對象可見,并由此能夠由自動化測試程序選擇的方法。可組合或獨立地使用各種技術(shù)和工具。所公開的示例性裝置和方法無論如何都不應(yīng)當(dāng)被認(rèn)為是限制性的。相反,本公開針對各種揭示的實施例的獨立或彼此組合或子組合的非顯而易見特征和方面。該方法不限于任何特定的方面、特征或其組合,所公開的方法也不要求存在任何一個或多個特定優(yōu)點或解決任何一個或多個問題。
在一種實現(xiàn)中,遍歷用戶界面元素的分層結(jié)構(gòu)到該用戶界面元素中要變得可見的父元素。然后,執(zhí)行使子對象可見的動作。如果該對象是可滾動的,則使子對象可見動作滾動該父對象,以使直接子對象可見。如果對象是可擴展的,則使子對象可見動作擴展該對象。一旦該對象變得可見,如果該對象所駐留的窗口被禁用、不具有焦點、或者如果另一對象覆蓋該對象,它仍可能不是可選擇的(即,當(dāng)它由用戶或用戶仿真測試程序點擊時能夠被選中)。檢查這些條件,以確保該對象是可選擇的。
在一個實施例中,使用了一種自頂向下的方法以使可滾動對象可見。定位父對象視圖區(qū)域中可見元素的父對象中的第一元素的位置,將第一可見元素的位置與要變得可見的元素的位置進行比較,然后在適當(dāng)?shù)姆较蛏蠞L動該父對象。有時候,在到達(dá)滾動對象的末端之前,要變得可見的元素?zé)o法出現(xiàn)。在這一情況下,反轉(zhuǎn)滾動方向??蓤?zhí)行二分搜索來定位第一可見元素。在某些實施例中,在散列表中標(biāo)記先前已被搜索過的位置,以確保它們僅被檢查一次。
在另一實施例中,使用自底向上方法來使可滾動對象可見。從底部向頂部遍歷所選擇的用戶界面對象的分層結(jié)構(gòu)。從底部對象的父對象開始,滾動每一父對象以顯示該父對象內(nèi)的子對象。當(dāng)?shù)竭_(dá)頂部對象時,再次遍歷該分層結(jié)構(gòu)到達(dá)底部。然后滾動每一父對象,直到在祖父對象內(nèi)顯示子對象。
在另一實施例中,從底部向頂部遍歷用戶對象分層結(jié)構(gòu),依次根據(jù)對象類型擴展或滾動每一對象。
當(dāng)參考附圖閱讀以下各實施例的詳細(xì)描述時,可以清楚其它特征和優(yōu)點。
圖1A是計算機系統(tǒng)的框圖。
圖1B是示出用于確保用戶界面元素可見的示例性方法的流程圖。
圖2是示出用于確保用戶界面元素可見的示例性方法的流程圖,它擴展了圖1A所示的某些方法動作。
圖3是示出用于確保用戶界面元素可見的示例性方法的流程圖,它擴展了圖2所示的某些方法動作。
圖4A是示例性用戶界面窗口的描述。
圖4B是圖4A的用戶界面窗口的分層表示的描述。
圖4C是圖4B的分層表示中的單個節(jié)點分層結(jié)構(gòu)的描述。
圖4D是當(dāng)實現(xiàn)圖3所示的方法時,圖4A的用戶界面的中間表示的描述。
圖4E是當(dāng)實現(xiàn)圖3所示的方法時,圖4A的用戶界面的另一中間表示的描述。
圖4F是當(dāng)實現(xiàn)圖3所示的方法時,圖4A的用戶界面的另一中間表示的描述。
圖4G是當(dāng)實現(xiàn)圖3所示的方法時,圖4A的用戶界面的另一中間表示的描述。
圖4H是當(dāng)實現(xiàn)圖3所示的方法時,圖4A的用戶界面的最終表示的描述。
圖5是用于確保用戶界面元素可見的另一示例性方法的流程圖,它擴展了圖2所示的某些方法動作。
圖6A是當(dāng)實現(xiàn)圖5所示的方法時,圖4A的用戶界面的中間表示的描述。
圖6B是當(dāng)實現(xiàn)圖5所示的方法時,圖4A的用戶界面的中間表示的描述。
圖6C是當(dāng)實現(xiàn)圖5所示的方法時,圖4A的用戶界面的最終表示的描述。
圖7是用于確保用戶界面元素可見的示例性方法的流程圖,它擴展了圖5所示的過程的某些方面。
圖8是用于闡明圖7的討論的列表框的描述。
圖9是可用于實現(xiàn)使用戶界面對象可見的計算機系統(tǒng)的框圖。
具體實施例方式
計算環(huán)境圖1A示出了其中可實現(xiàn)所描述的若干實施例的合適的計算環(huán)境100A的一般化示例。計算環(huán)境100A并非對使用范圍或功能提出任何局限,因為這些技術(shù)和工具可以在各種通用或?qū)S糜嬎悱h(huán)境中實現(xiàn)。
參考圖1A,計算環(huán)境100A包括至少一個處理單元110A和存儲器120A。在圖1A中,這一最基本的配置130A包括在虛線中。處理單元110A執(zhí)行計算機可執(zhí)行指令,并且可以是真實或虛擬的處理器。在多處理系統(tǒng)中,多個處理單元執(zhí)行計算機可執(zhí)行指令以提高處理能力。存儲器120A可以是易失性存儲器(例如,寄存器、高速緩存、RAM)、非易失性存儲器(例如,ROM、EEPROM、閃存等)或兩者的某一組合。存儲器120A儲存實現(xiàn)使UI元素可見的方法和裝置的軟件180A。
計算環(huán)境可具有其它特征。例如,計算環(huán)境100A包括存儲140A、一個或多個輸入設(shè)備150A、一個或多個輸出設(shè)備160A以及一個或多個通信連接170A。諸如總線、控制器或網(wǎng)絡(luò)等互連機制(未示出)將計算環(huán)境100A的組件互連。通常,操作系統(tǒng)軟件(未示出)為在計算環(huán)境100A中執(zhí)行的其它軟件提供了操作環(huán)境,并協(xié)調(diào)計算環(huán)境100A的組件的活動。
存儲140A可以是可移動或不可移動的,并包括磁盤、磁帶或盒式磁帶、CD-ROM、DVD或可用于儲存信息并可在計算環(huán)境100A內(nèi)訪問的任何其它介質(zhì)。存儲140A儲存軟件180A用于實現(xiàn)使UI元素可見的機制的指令。
輸入設(shè)備150A可以是觸摸輸入設(shè)備,諸如鍵盤、鼠標(biāo)、筆、或跟蹤球、語音輸入設(shè)備、掃描設(shè)備或向計算環(huán)境100A提供輸入的其他設(shè)備。對于音頻或視頻編碼,輸入設(shè)備150A可以是聲卡、視頻卡、TV調(diào)諧卡、或接收模擬或數(shù)字形式的音頻或視頻輸入的類似設(shè)備、或?qū)⒁纛l或視頻樣值讀入計算環(huán)境100A中的CD-ROM或CD-RW。輸出設(shè)備160A可以是顯示器、打印機、揚聲器、CD書寫器或從計算環(huán)境100A提供輸出的其他設(shè)備。
通信連接170A允許通過通信介質(zhì)到另一計算實體的通信。通信介質(zhì)在已調(diào)制數(shù)據(jù)信號中傳達(dá)諸如計算機可執(zhí)行指令、音頻或視頻輸入或輸出、或其它數(shù)據(jù)等信息。已調(diào)制數(shù)據(jù)信號是以在信號中編碼信息的方式設(shè)置或改變其一個或多個特征的信號。作為示例,而非局限,通信介質(zhì)包括用電、光、RF、紅外、聲學(xué)或其它載波實現(xiàn)的有線或無線技術(shù)。
這些技術(shù)和工具可以在計算機可讀介質(zhì)的通用上下文中描述。計算機可讀介質(zhì)是可在計算環(huán)境內(nèi)訪問的任何可用介質(zhì)。作為示例,而非局限,對于計算環(huán)境100A,計算機可讀介質(zhì)包括存儲器120A、存儲140A、通信介質(zhì)以及以上任一個的組合。
這些技術(shù)和工具可以在諸如程序模塊等在計算環(huán)境內(nèi)在目標(biāo)真實或虛擬處理器上執(zhí)行的計算機可執(zhí)行指令的通用上下文中描述。一般而言,程序模塊包括例程、程序、庫、對象、類、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。程序模塊的功能可以如各實施例中所需的那樣組合或分開。用于程序模塊的計算機可執(zhí)行指令可以在本地或分布式計算環(huán)境中執(zhí)行。
如有需要,此處所描述的技術(shù)(例如,確保用戶界面項可見,并且因此可被選中用于自動化測試)可以作為自動化測試服務(wù)的一部分來提供。由此,與服務(wù)交互的程序可如所需地利用這些特征。
此處所描述的各種技術(shù)對于確保用戶界面元素可見且可選擇是有用的。用戶界面元素可以采取許多形式,諸如圖形按鈕、編輯框、滾動條、選取列表、下拉菜單、ACTIVEX控件、圖像等等。用戶界面元素可以作為程序的一部分(例如,為控制程序的功能)或在文檔內(nèi)出現(xiàn)。
本發(fā)明一般針對通過確保圖形用戶界面(GUI)元素可見,使得它可以被選擇并且由此可以由自動測試程序來測試,而對軟件應(yīng)用程序進行自動測試。術(shù)語“可見”被定義如下如果存在屬于GUI元素的、可在屏幕上點擊的至少一個可見點,則該GUI元素是可見的。為使可點擊,該點必須既是可見又是被啟用的,且必須不被另一對象覆蓋。
為說明起見,在以下詳細(xì)描述中使用列表框和樹形結(jié)構(gòu)作為可以變得可見的可見GUI元素的示例。然而,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,此處所示的實施例不局限于列表框和樹形視圖,而是可以被推廣到任何其它可見GUI控件,諸如組合框、菜單、多列列表框、多列組合框、多選擴展列表框、ActiveX控件、多行文本框、結(jié)合了單選按鈕的控件、切換按鈕和/或按鈕、滾動窗格、加選項卡的窗格、日歷、窗口、以及沒有標(biāo)準(zhǔn)名稱的各種各樣的自定義控件。
如此處所描述的,控件、元素、項和對象這幾個詞是可互換的,并且也包含諸如容器等概念。所有這些列出的詞語之后的概念包含了任何可查看的對象、組合框、菜單、多列列表框、多列組合框、多選擴展列表框、多行文本框、結(jié)合單選按鈕的控件、切換按鈕和/或按鈕、滾動窗格、加選項卡的窗格、日歷、窗口及其組合。正在不斷地創(chuàng)建可查看對象的新實現(xiàn),并且所公開的實施例包含尚未被給予正式名稱的可查看元素。
此處所描述的各種技術(shù)對于確保用戶界面項可見,并由此可由自動化測試程序選擇是有用的。用戶界面元素可采用許多形式,諸如圖形按鈕、編輯框、滾動條、選取列表、下拉菜單、ACTIVEX控件、圖像等等。用戶界面元素可以作為程序的一部分(例如,為控制程序的功能)或在文檔內(nèi)出現(xiàn)。僅當(dāng)用戶界面項可見時,它才能由使用鼠標(biāo)、鍵盤或其它用戶界面仿真來驅(qū)動基于UI的目標(biāo)應(yīng)用程序的測試裝置選擇。例如,圖形用戶界面(GUI)允許用戶在任何給定的時刻選擇許許多多選項。在種種可用的選擇中,用戶可打開新應(yīng)用程序、可選擇打開的應(yīng)用程序中的項、或可選擇修改操作系統(tǒng)的默認(rèn)設(shè)置。
由于這一靈活性,圖形用戶界面具有幾乎無限數(shù)量的路徑,在這些路徑中,必須測試至少一部分來確保底層的程序是盡可能無程序缺陷的。由于無限路徑問題,可能要求人們在現(xiàn)場或在Beta版現(xiàn)場延長測試時間段,以滿意地測試包括圖形用戶界面的程序。為解決這一問題,開發(fā)了自動化測試過程,它模擬用戶鍵盤和鼠標(biāo)輸入以更準(zhǔn)確地執(zhí)行具有GUI的程序內(nèi)可用的多個選項。然而,為測試GUI內(nèi)的項,該項首先必須是可見的,且是可選擇的。
貫穿本討論,以最通用的術(shù)語提及滾動的概念。不同的GUI元素將以不同的方式來滾動;諸如列表框等GUI元素可以在不同的操作系統(tǒng)中甚至在運行在同一操作系統(tǒng)中的不同程序中以不同的方式滾動。
綜述參考圖1B,流程圖100B示出了此處所公開的方法的簡要綜述。選擇要變得可見的用戶界面元素。這一選擇可以由用戶界面測試程序來完成。在過程框102B,確定該用戶界面元素的父對象。一般而言,如果需要使列表框中的元素變得可見,則必須知道與該元素相關(guān)聯(lián)的列表框。這一過程框做出該確定。在過程框104B,執(zhí)行使子對象可見動作。該過程參考圖2更完整地解釋,它使用戶界面對象在屏幕上可見。然而,可見性有時候不足以確保對象是可選擇的,因為另一框可能覆蓋它、該對象所屬的窗口可能沒有焦點、或可能有某些別的東西影響可選擇性。這一過程做出檢查以確保可見對象是可選擇的。
圖2的流程圖所示的示例性方法200可用于執(zhí)行如過程框104B處所示的使子對象可見動作。示例性方法200表示擴展上述示例性方法的一個特定實施例,并且無論如何都不應(yīng)被解釋為限制性的。相反,該方法可以在排列和細(xì)節(jié)上進行修改,而不脫離所公開的技術(shù)的范圍。例如,在特定實施例中,可以省略所描述的某些動作,并且可以按與所示的不同順序執(zhí)行某些動作。
存在某些合成屏幕對象,它們要求滾動和擴展的組合來確保特定元素出現(xiàn)。對于這些對象,在必要時,用自頂向下的方法處理其分層結(jié)構(gòu)樹中的一部分,并用自底向上的方法處理該樹的另一部分,使得某些元素族使用自底向上方法而變得可見,而其它元素族使用自頂向下方法而變得可見。這在過程框202中表示,其中確定給定用戶界面對象的相對分層結(jié)構(gòu)頂部。
如果對象是要擴展的種類(204),諸如某些實施例中的樹形列表,則它然后被擴展(206)。擴展可以是自底向上或自頂向下的。如果對象是要滾動的種類(208),則有兩種可能性或者該對象及其分層父對象自底向上滾動(210),或者它們自頂向下滾動(214)。這可能仍無法確保對象在屏幕上的可見性,因為仍可能有必須出現(xiàn)的另一擴展或滾動層,在這一情況下,該過程重復(fù)其自身(218)。
如過程框210所示的,在某些實施例中,是使用自底向上方法使用戶界面變得可見,其中,滾動該用戶界面元素的父對象,直到該用戶界面元素出現(xiàn)在父對象的客戶區(qū)域中。該操作被遞歸地執(zhí)行,直到到達(dá)分層結(jié)構(gòu)的用戶界面元素的頂部對象。隨后,滾動用戶界面對象的父對象,直到該用戶界面對象在祖父對象中可見。該操作也被遞歸執(zhí)行,直到用戶界面元素出現(xiàn)在分層結(jié)構(gòu)中的頂部元素中,并且因此在屏幕上是可見的。一旦元素可見,它就可被自動化測試程序選擇。一個示例性實施例在用戶界面元素及其分層祖先的邊界矩形已知時使用自底向上的方法。
在其它實施例中,如在過程框216中所示的,可使用自頂向下方法使用戶界面元素變得可見,其中,滾動分層結(jié)構(gòu)上頂部的元素直到其子元素可見。這一操作被遞歸地執(zhí)行,直到到達(dá)該用戶界面元素。另一示例性實施例在用戶界面元素及其分層祖先的邊界矩形未知時使用自頂向下的方法。
如在過程框216中所示的,在某些實施例中,由于其視圖被折疊,用戶界面元素是隱藏的,例如如同它是樹形視圖中的隱藏節(jié)點那樣。在某些這樣的情況下,從底部到頂部沿著元素分層結(jié)構(gòu)向上擴展該元素,使得所有父元素也都被擴展。這保證原始元素是可見的。在元素由于其視圖被折疊而被隱藏的其它實施例中,遍歷元素分層結(jié)構(gòu)到頂部的可查看元素,然后從頂部到底部遍歷該樹,使得依次擴展每一可擴展節(jié)點。擴展的對象的表示的完整視圖可以足夠復(fù)雜,使得整個擴展的視圖無法適合屏幕。在這一情況下,顯示原始用戶界面元素,以及元素分層結(jié)構(gòu)中適合屏幕的那些部分。
有時候,由于不與用戶界面元素窗口或線程相關(guān)聯(lián)的一個或多個對象在其頂部,從而阻擋了視圖,用戶界面元素不是可見的。在其它時刻,可見到用戶界面元素,但是仍無法選擇它,因為另一對象位于它之上。在這些情況下,通過給予窗口焦點、通過調(diào)整Z軸位置、通過使與該窗口相關(guān)聯(lián)的線程成為前臺線程或通過某些其它手段,將用戶界面元素及與其相關(guān)聯(lián)的窗口推到屏幕的前方。這確保要選擇的元素在顯示中的頂部窗口中,并且由此是可見且可選擇的。這在過程框220中表示。
流程圖200僅示出了一個示例性實施例,并且無論如何都不應(yīng)被解釋為限制性的。例如,在流程圖中過程框204和208中做出的擴展或滾動項的決策可以在其它位置做出,諸如在遍歷分層結(jié)構(gòu)前做出。方法200可以由駐留在計算環(huán)境100A中的測試工具實現(xiàn),并且可以用軟件、硬件或兩者的組合來實現(xiàn)。
如有需要,此處所描述的技術(shù)(例如,確保一個要測試的項是可見的)可以作為自動化測試服務(wù)的一部分來提供。如果適合其特性,不同類型的對象可具有此處所公開的方法的不同例示。由此,與服務(wù)交互的程序可以如所需地利用這些特征。
用于確保用戶界面中的元素可見的示例性自底向上方法圖3是用于實現(xiàn)所公開的使UI對象可見的實施例的基本過程的流程圖300。流程圖300僅示出了一個示例性實施例,且無論如何都不應(yīng)被解釋為限制性的。圖4A-4H合在一起是使用圖2所公開并在圖3進一步放大的過程的示例圖示。這一自底向上方法可以在控件的邊界矩形已知時使用。當(dāng)控件是使用由操作系統(tǒng)提供的工具創(chuàng)建的標(biāo)準(zhǔn)控件,或者當(dāng)這類矩形是在創(chuàng)建時另外指定時,控件的邊界矩形可以是已知的。圖4A示出了一個示例性用戶界面400A,它具有要變得可見的目標(biāo)用戶界面元素,用“Mint”408A來標(biāo)記。
對于要變得可見的元素,它必須物理地位于擁有它的窗口的邊界之內(nèi)。類似地,控件內(nèi)的每一元素必須物理地位于要使它被看見的控件窗口(即,在它之內(nèi)顯示)的邊界內(nèi)。用戶界面元素“Mint”408A是列表框“HerbList”406A中的元素,它目前在看不見的地方,因為它目前未出現(xiàn)在“HerbList”列表框視圖窗口中?!癏erbList”406A本身是列表框“FoodList”404A中的一個元素。列表框“FoodLists”404A屬于窗口“FoodWindow”402A,但是當(dāng)前被滾動到該出窗口之下,因此不能看到。
以軟件表示用戶界面元素的一種常見方法是將其以具有各種節(jié)點的分層樹的形式儲存。圖4B示出了圖4A所示的用戶界面元素的一個示例性分層表示。節(jié)點402B-412B被示出為具有父-子關(guān)系。注意該關(guān)系的復(fù)雜特性,因為用戶界面元素可以是對于其它用戶界面元素的表示的父節(jié)點。在這一實施例中,列表框“FoodLists”404B是三個子列表框406B、408B和410B(分別是“NutList”、“VegList”和“HerbList”)的父對象。
圖3是用于確保要測試的對象可見的基本過程的流程圖300,它使用了上述概念。流程圖300僅示出了一個示例性實施例,并且無論如何都不應(yīng)被解釋為限制性的。這些步驟可以由駐留在計算環(huán)境100A中的測試工具實現(xiàn),并且可以用軟件、硬件或兩者的組合來實現(xiàn)。
在過程框302,確定希望變得可見的元素的分層結(jié)構(gòu)。圖4C是圖4B所示的界面元素的簡化視圖,它顯示了與要變得可見的標(biāo)簽為“Mint”408A的界面元素相關(guān)聯(lián)的節(jié)點分層結(jié)構(gòu)。如可以見到的,從要變得可見的元素開始,即位于其直接父對象“HerbList”404C中的標(biāo)簽為“Mint”402C的元素開始,遍歷圖4B所示的分層結(jié)構(gòu),然后到“FoodLists”406C,然后到分層結(jié)構(gòu)“FoodWindow”408C的頂部。
在過程框304,確定當(dāng)前元素是否具有父對象。如果是,則該過程在過程框306繼續(xù);如果不是,則該過程在過程框310繼續(xù)。轉(zhuǎn)向圖4C,可以看到,當(dāng)前元素“Mint”402C的確具有父對象,即“HerbList”404C。
在過程框306,移動(在列表框的情況下為滾動)當(dāng)前元素(在該示例性實施例中為Mint 402C),直到它與其父對象(“HerbList”404C)重疊。給定元素所必需的移動是實現(xiàn)專用的,但是本領(lǐng)域的技術(shù)人員可以容易地確定它。參考圖4D,滾動“HerbList”404D,直到元素“Mint”402D與列表框“HerbList”404D的視圖區(qū)域重疊。在某些情況下,需要在一個以上方向上移動對象,以使兩個對象重疊。
在過程框308,在該分層結(jié)構(gòu)中向上移動一層,這具有使(先前的)父元素變?yōu)楫?dāng)前元素的效果。繼續(xù)參考圖4C,“Mint”402C的父對象“HerbList”404C成為當(dāng)前元素。該過程在過程框304繼續(xù),其中確定當(dāng)前元素“HerbList”404C具有父對象“FoodLists”406C。然后,如圖4E所示,在過程框306,滾動當(dāng)前元素“HerbList”40E,直到它與“FoodLists”406E重疊。重復(fù)過程框304、306和308,圖4F示出了“FoodLists”404F與其父對象“FoodWindow”406F重疊。
一旦遍歷該分層結(jié)構(gòu)到頂部元素,該過程在過程框310繼續(xù)。如可以在圖4F中見到的,要變得可見的目標(biāo)元素(“Mint”402F)可能仍在該分層結(jié)構(gòu)頂部的可見對象之外。為確保目標(biāo)元素可見,從底部到頂部滾動該分層結(jié)構(gòu)中的每一父元素,以顯露祖父元素中的子元素。在過程框310,再次從頂部遍歷對象分層結(jié)構(gòu)到要變得可見的元素的父元素“HerbList”404C,如圖4C所示,該元素然后變?yōu)楫?dāng)前元素。在過程框312,確定當(dāng)前元素是否具有父元素。如果沒有,則該過程結(jié)束。如果存在父元素,則該過程在過程框314繼續(xù)。在過程框314,滾動當(dāng)前對象,直到目標(biāo)對象的邊界矩形與當(dāng)前對象的父對象的邊界矩形重疊。參考圖4G,滾動當(dāng)前對象“HerbList”404G,直到目標(biāo)對象“Mint”402G的邊界矩形與“HerbList”404G的父對象“FoodLists”406G的邊界矩形重疊。然而,“HerbList”404G和“Mint”402G在“Foodwindows”408G中仍是不可見的。
在過程框316,在該分層結(jié)構(gòu)中向上移動一層,使得當(dāng)前元素的父元素成為新的當(dāng)前元素。然后重復(fù)過程框312、314和316,直到過程到達(dá)沒有父元素的元素。圖4H示出了該過程的下一迭代的結(jié)果,其中滾動當(dāng)前元素“FoodLists”406H,直到目標(biāo)對象“Mint”402H的邊界矩形出現(xiàn)在“FoodList”406H的父對象“FoodWindow”408H內(nèi)。這在其分層結(jié)構(gòu)頂部元素“FoodWindow”408H內(nèi)顯露了標(biāo)簽為“Mint”402H的元素,從而使得“Mint”402H可見。一旦如過程框312所確定的到達(dá)沒有父元素的分層結(jié)構(gòu)的頂部,該過程結(jié)束,使得要變得可見的原始元素“Mint”402H當(dāng)前在其分層結(jié)構(gòu)最頂部的元素中可見。
用于確保用戶界面中的元素可見的示例性自頂向下方法圖5是用于實現(xiàn)使用自頂向下方法使UI對象可見的所公開的實施例的基本過程的流程圖500。在一個示例性實施例中,采用以下方法以使這類對象可見。參考圖5的流程圖,一旦要變得可見的目標(biāo)對象被選中,就遍歷該對象的分層結(jié)構(gòu),直到到達(dá)該分層結(jié)構(gòu)頂部的對象(502)。這給出了可能需要修改以確保目標(biāo)對象的可見性的所有對象的列表。
流程圖500僅示出了一個示例性實施例,并且無論如何都不應(yīng)被解釋為限制性的。圖6A-6C合在一起是使用圖5所公開的過程的示例圖示,它們使用了與前一實施例中示出的相同的用戶界面元素。再次轉(zhuǎn)向圖4A,要使標(biāo)簽為“Mint”408A的用戶界面元素可見。對于這一示例性用戶界面中要變得可見(或顯示)的元素,它必須物理地位于擁有它的窗口的邊界內(nèi)。
圖5是用于確保要測試的對象可見的基本過程的流程圖500,它使用了上述概念。流程圖500僅示出了一個示例性實施例,并且無論如何都不應(yīng)被解釋為限制性的。這些步驟可以由駐留在計算環(huán)境100A內(nèi)的測試工具來實現(xiàn),并且可以用軟件、硬件或兩者的組合來實現(xiàn)。
一旦選擇了要變得可見的目標(biāo)元素,在過程框502,遍歷該目標(biāo)元素的分層結(jié)構(gòu),直到到達(dá)該分層結(jié)構(gòu)頂部的元素。這給出了可能需要修改以確保目標(biāo)對象的可見性的所有對象的列表。再次轉(zhuǎn)向圖4C,示出了要變得可見的元素“Mint”402C的分層表示。該分層結(jié)構(gòu)的頂部元素是“FoodWindow”408C。這變?yōu)楫?dāng)前元素。同時,確定當(dāng)前元素的直接子元素。在所示的實施例中,子元素是“FoodLists”406C。在過程框504,確定目標(biāo)元素是否可滾動。如果是,則該過程在過程框506繼續(xù)。如果不是,則該過程在過程框514繼續(xù)。
在過程框506,滾動當(dāng)前元素,直到在父元素內(nèi)顯示子元素。圖6A示出了在通過在窗口“FoodWindow”602A內(nèi)滾動直到可見而使子元素“FoodLists”604A在分層結(jié)構(gòu)的頂部元素內(nèi)可見之后所示的實施例。
在過程框508,遍歷該分層結(jié)構(gòu)向下一層,使得當(dāng)前子元素(在所示的實施例中為“FoodLists”604A)變?yōu)樾碌漠?dāng)前元素。在過程框510,確定當(dāng)前元素是否具有子元素。如果是,則該過程在過程框504繼續(xù)。如果不是,則該過程終止。
圖6B示出了此處所描述的方法的下一迭代的結(jié)果?!癋oodLists”是當(dāng)前元素,“HerbList”602B是子元素;在“FoodLists”604B中滾動“HerbList”602B,直到“HerbList”602B在“FoodWindow”606B中可見。
圖6C示出了用于所示的實施例的方法的最終迭代“HerbList”606C是父元素,“Mint”602C是子元素;滾動“HerbList”606C,直到“Mint”602C在分層結(jié)構(gòu)頂部表單“FoodWindow”604C中可見。
如果在過程框504處,當(dāng)前元素不可滾動,則在過程框514,確定它是否可擴展。示例性可擴展元素是樹形列表和組合框。如果當(dāng)前元素是可擴展的,則在過程框516擴展它;該過程然后在過程框508繼續(xù)。如果不是可擴展的,則該過程在過程框508繼續(xù)。
圖7的流程圖中示出的一種示例性方法700可用于如過程框506所示的那樣找出元素并使它們可見。示例性方法700表示擴展上述示例性方法的一個特定實施例,并且無論如何都不應(yīng)被解釋為限制性的。相反,可以在排列和細(xì)節(jié)上修改該方法,而不脫離所公開的技術(shù)的范圍。例如,在特定實施例中,可省略所描述的某些動作。
在過程框506,滾動當(dāng)前元素,直到其分層子元素可見。用于執(zhí)行這一滾動的一個示例性方法在流程圖700中揭示。最初,如下所述,執(zhí)行搜索以定位當(dāng)前元素內(nèi)任何可見的子元素。在過程框702,每隔n個元素進行檢查。在一個示例性實施例中,最初每隔N/2個元素(其中N是父元素內(nèi)元素的總數(shù)),盡管對于n的最優(yōu)選擇是依賴于實現(xiàn)的,并且n的最佳值通常難以確定。在一個實施例中,當(dāng)元素總數(shù)為100時,最初每隔50個元素檢查。如果到達(dá)列表的底部而沒有發(fā)現(xiàn)可見項,則每隔n/2個元素檢查,然后每隔n/4個元素檢查,依此類推。在某些實施例中,在散列表中標(biāo)記所檢查的每一元素,以確保它僅被檢查一次。繼續(xù)參考圖8,使用列表框800來闡明該方法的某些方面。其分層表示在圖4B和4C中找到的列表框“HerbList”802是列表項“Allspice”、“Anise”等804的父節(jié)點。在該列表框中只有16個項,因此最大項/2(16/2)將是原始的搜索參數(shù)(依賴于應(yīng)用程序的例示)。第8個項是“Ginger”808,并且它是不可見的,而第16個項“Vanilla”812也是不可見的。在過程框704,確定是否定位了可見元素。如果是,則該過程在過程框708繼續(xù)。如果沒有定位任何元素,則該過程在過程框706繼續(xù)。在過程框706,檢查第(1/x)個元素,其中x等于當(dāng)前遞歸層。在所示的實施例中,由于這是第二次檢查該列表,因此每隔四個元素((1/2)*8)進行檢查-定位了“Chili”806并且它是可見的。在一個實施例中,儲存關(guān)于哪些元素已被檢查了可見性的信息,以確保它們不被重復(fù)檢查。在該實施例的某些形式中,該信息儲存在散列表中。在其它實施例中,可使用其它搜索類型,諸如斐波納契(Fibonacci)搜索、跳躍搜索或線性搜索。在找到可見元素之后,使用二分搜索來找出將在實際滾動中擔(dān)當(dāng)錨的角色的第一個可見元素。
一旦定位了第一個可見元素,就通過將目標(biāo)元素的適當(dāng)參數(shù),通常是位置參數(shù)與可見元素進行比較,來發(fā)現(xiàn)滾動方向。在過程框708,確定滾動方向。在某些實施例中,將可見元素個數(shù)與目標(biāo)元素個數(shù)進行比較,然后將滾動方向設(shè)為適當(dāng)?shù)姆较?。一旦確定了滾動方向,就滾動該元素(710),直到在當(dāng)前(滾動)元素的可見性區(qū)域內(nèi)顯示了期望的元素(714)。有時候,在找到元素之前到達(dá)末端(712),在這一情況下,將滾動方向設(shè)為相反的方向(716)。
再次參考圖8,“Chili”806具有元素個數(shù)4,而目標(biāo)元素“Mint”810具有元素個數(shù)10,因此將向下滾動該列表框,直到“Mint”810可見(714)。盡管有時候,在找到期望元素之前定位了末端。在過程框712,確定是否到達(dá)了當(dāng)前元素(“HerbList”802)的末端。如果是,則該過程在過程框716繼續(xù),其中將滾動方向設(shè)為相反的方向。也可能在同一方向上滾動了某些次數(shù)之后,第一個可見元素不改變。如果這樣,則這是在錯誤方向上滾動的指示;再一次,在一個示例性實施例中,滾動方向應(yīng)當(dāng)被設(shè)為相反的方向。
確保窗口接受用戶數(shù)據(jù)的示例性實施例在某些實施例中,在使目標(biāo)元素在目標(biāo)窗口中可見之后,通過確保與該用戶界面元素相關(guān)聯(lián)的窗口處于接受用戶輸入的狀態(tài)來確??梢娦?。在鍵盤輸入的情況下,這通常被稱為窗口具有焦點。例如,如果在與該用戶界面元素相關(guān)聯(lián)的窗口之上有另一窗口,如果窗口被禁用,或者如果與該窗口相關(guān)聯(lián)的線程不是前臺線程,則窗口可能不處于接受用戶輸入的狀態(tài)。在不同的實施例中,可采用以下方法,盡管這些示例不被認(rèn)為是限制性的,且通常是依賴于實現(xiàn)的。在一個實施例中,設(shè)置z索引,使得與該用戶界面元素相關(guān)聯(lián)的適當(dāng)分層對象處于屏幕的前方。z索引是窗口沿計算機屏幕的z軸所具有的值,該軸朝向和背離計算機用戶延伸。一般而言,具有最大z值的窗口在屏幕的前方,并且由于它不被遮擋,它可能已對用戶輸入就緒。
在另一實施例中,設(shè)置將與要變得可見的對象相關(guān)聯(lián)的窗口指定為具有焦點的窗口的屬性。在又一實施例中,實現(xiàn)諸如“將窗口帶到頂部”等過程,它確保窗口對用戶輸入就緒。在另一實施例中,確定不可見元素(諸如清除矩形)是否在要選擇的用戶元素的前方。如果是,則將不可見元素重新定位到允許所述元素被選中的位置。在再一實施例中,嘗試多種這樣的方法。
示例性系統(tǒng)實施例圖9示出了可用于實現(xiàn)使用戶界面對象可見的計算機系統(tǒng)900的另一示例性實施例。計算機系統(tǒng)900具有用戶界面910。它還包含分層排列(908)的用戶界面對象902、904、906。一種典型的排列是基用戶界面節(jié)點902與父節(jié)點904相關(guān)聯(lián),基用戶界面節(jié)點是要變得可見的用戶界面對象,諸如列表框中的項,而父節(jié)點904即列表框。列表框904本身與窗口906相關(guān)聯(lián)。許多其它排列也是可能的。
計算機系統(tǒng)900還包括自動化測試器模塊,它可物理地位于計算機系統(tǒng)900上,或可位于通過諸如內(nèi)聯(lián)網(wǎng)或因特網(wǎng)等通信鏈接連接到計算機系統(tǒng)900的遠(yuǎn)程位置。請求動作模塊912選擇要測試的特定用戶界面元素。該模塊可以是自動化測試者模塊914的一部分,或可以是單獨的模塊。它可駐留在與要變得可見的UI節(jié)點902相同的計算機上,或者可駐留在可與要變得可見的UI節(jié)點902所駐留的計算系統(tǒng)通信的一個不同的計算系統(tǒng)上。
該系統(tǒng)也包括遍歷分層結(jié)構(gòu)模塊916,當(dāng)給定用戶節(jié)點時,它可確定使該用戶界面節(jié)點可見需要考慮的父節(jié)點。例如,如果給定UI節(jié)點902,即列表框元素,它可定位父列表框904,以及父列表框所屬的窗口906。
有時候,復(fù)雜的元素同時需要滾動和擴展,以使期望的元素可見???18示出了擴展模塊。該模塊用于擴展其中滾動不適當(dāng)?shù)脑?,諸如樹形視圖。
也包括在父對象中定位模塊920。該模塊定位父對象中的子對象。例如,參考圖8,該模塊可在列表框“HerbList”802中定位標(biāo)簽為“Mint”的元素810。
框922示出了在祖父對象中定位模塊922。參考圖4C和4H,該模塊允許父對象使子對象在祖父對象中可見。在圖4G中,子對象“HerbList”404G在父對象“FoodLists”406G中可見,但是不能在祖父對象“FoodWindow”408G中看到。在圖4H中,父對象“FoodLists”406H滾動了子對象“HerbList”404H,使得“HerbList”404H現(xiàn)在可以在窗口“FoodWindow”408H中看到。
還存在窗口就緒模塊924。該模塊確保與要變得可見的用戶界面對象相關(guān)聯(lián)的窗口處于如上所述接受用戶輸入的狀態(tài)。簡言之,該模塊檢查使得用戶界面元素可被選中的條件是否為真。這些條件的示例是窗口被啟用、窗口所屬的線程是前臺線程、或沒有另一對象覆蓋要變得可見的用戶界面元素。
替換實施例在另一示例性實施例中,自頂向下擴展可擴展元素。諸如折疊的樹形視圖中所示的某些元素由于擴展的特性,即它們是部分隱藏的,而是不可見的。為確??蓴U展目標(biāo)元素是可見的,從頂部向底部擴展目標(biāo)分層結(jié)構(gòu)。即,遍歷目標(biāo)元素以定位分層結(jié)構(gòu)中的頂部元素。然后,擴展該頂部元素。如果該元素本身具有子對象,則擴展它,依此類推,直到到達(dá)目標(biāo)元素并使其變得可見。諸如層疊對話框、層疊菜單、組合列表框、多選擴展列表框等控件可能都需要擴展。
在另一實施例中,自底向上擴展可擴展目標(biāo),即擴展該目標(biāo),然后擴展其父對象,向上依此類推,直到分層結(jié)構(gòu)中的頂部元素。
在另一實施例中,通過組合擴展和滾動使元素變得可見遍歷該分層結(jié)構(gòu)到頂部元素;當(dāng)回頭向下遍歷該樹時,根據(jù)沿遍歷路線的每一元素的類型擴展或滾動它。
此處所描述的實現(xiàn)是技術(shù)不可知的,因為它應(yīng)當(dāng)能夠?qū)θ魏尉哂锌蓾L動或可擴展元素的給定UI實現(xiàn)。此外,該功能期望被構(gòu)建到自動測試程序中,使得該實現(xiàn)對于自動測試程序的用戶是不可見的;對象表現(xiàn)為可見且對輸入就緒,而無需進一步的工作。用戶不應(yīng)需要知道使元素可見的機制是如何對特定類型的控件工作的。例如,用戶不需要發(fā)送操作系統(tǒng)消息以使一類GUI元素可見,并拖曳滾動條滑塊以使一個不同的GUI元素可見。
構(gòu)成此處所公開的實施例的功能應(yīng)當(dāng)是可擴展的;如果執(zhí)行實際的滾動和擴展的默認(rèn)動作不對特定的元素起作用,則該動作可由用戶覆蓋,而保持底層過程和校驗不變。例如,使用一個特定的示例,如果向上翻頁/向下翻頁是滾動容器1的默認(rèn)動作,但是它對容器2不其作用,但是Ctrl-滾輪將滾動容器2,則用戶可重新定義該功能的這一部分。然而,做出基本決策的過程較佳地應(yīng)當(dāng)保持不變。這些過程包括滾動方向、何時停止、滾動是否成功等等。
其它替換方案描述并示出了本發(fā)明的原理之后,可以認(rèn)識到,可在排列和細(xì)節(jié)上修改各實施例而不脫離這些原理。應(yīng)當(dāng)理解,此處所描述的程序、過程或方法并不涉及或限于任何特定類型的計算環(huán)境,除非另外指明。例如,此處所描述的技術(shù)可以應(yīng)用于可由用戶選擇的任何用戶界面元素。
可以使用各種類型的通用或?qū)S糜嬎悱h(huán)境來執(zhí)行依照此處所描述的教導(dǎo)的操作。以軟件示出的實施例的各元素可以用硬件來實現(xiàn),反之亦然??墒褂酶鞣N類型的通用或?qū)S糜嬎銠C來執(zhí)行此處所揭示的系統(tǒng)和方法。此外,此處所描述的動作可以用包括用于執(zhí)行這些動作的計算機可執(zhí)行指令的計算機可讀介質(zhì)來實現(xiàn)。
鑒于可應(yīng)用本發(fā)明的原理的許多可能的實施例,應(yīng)當(dāng)認(rèn)識到,詳細(xì)描述的實施例僅是說明性的,并且不應(yīng)被認(rèn)為是限制本發(fā)明的范圍。相反,要求保護落入所附權(quán)利要求書及其等效技術(shù)方案的范圍和精神內(nèi)的所有這些實施例作為本發(fā)明。
權(quán)利要求
1.一種計算機實現(xiàn)的方法,包括在自動化用戶界面測試環(huán)境內(nèi),選擇一要變得可見的用戶界面元素;確定所述用戶界面元素的至少一個父元素;對所述用戶界面元素的至少一個父元素執(zhí)行使子元素可見的動作;以及確保所述用戶界面項是可選擇的;其中,執(zhí)行使子元素可見的動作包括如果所述父元素是可滾動的,則滾動所述父元素以使所述用戶界面元素可見;以及如果所述父元素是可擴展的,則擴展所述父元素以使所述用戶界面元素可見。
2.如權(quán)利要求1所述的方法,其特征在于,所述滾動包括使用自頂向下滾動或自底向上滾動中的一個。
3.如權(quán)利要求1所述的方法,其特征在于,所述父元素還包括至少一個當(dāng)前可見的子元素,所述子元素還包括一子元素位置變量;并且其中,所述用戶界面元素包括一用戶界面元素變量;所述滾動還包括找出一當(dāng)前可見的子元素;將所述當(dāng)前可見的子元素與所述用戶界面元素變量進行比較,以確定移動方向;以及在所述移動方向上滾動,直到所述用戶界面元素在所述父元素內(nèi)可見。
4.如權(quán)利要求3所述的方法,其特征在于,在所述移動方向上滾動在所述用戶界面元素變得可見之前到達(dá)末端位置,并且其中,所述方法還包括在與所述移動方向相反的方向上滾動,直到所述用戶界面元素可見。
5.如權(quán)利要求3所述的方法,其特征在于,在所述移動方向上滾動無法改變所述當(dāng)前位置,并且其中,所述方法還包括在與所述移動方向相反的方向上滾動,直到所述用戶界面元素可見。
6.如權(quán)利要求3所述的方法,其特征在于,找出當(dāng)前可見子元素包括使用至少一種搜索類型來搜索第一可見子元素,所述搜索類型包括二分搜索、斐波納契搜索、跳躍搜索或線性搜索。
7.如權(quán)利要求1所述的方法,其特征在于,存在N個子元素,所述方法還包括使用二分搜索,并且其中,所述搜索遞歸地每隔n個子元素檢查其可見性,最初n=N/2或n=N/3;并且在每一連續(xù)的遞歸層,n=n/2。
8.如權(quán)利要求7所述的方法,其特征在于,標(biāo)記對其檢查可見性的每一子元素,并且其中,在后續(xù)的遞歸搜索中不檢查已標(biāo)記的子元素。
9.如權(quán)利要求8所述的方法,其特征在于,還包括一散列表,并且其中,所標(biāo)記的子元素儲存在所述散列表中。
10.如權(quán)利要求1所述的方法,其特征在于,所述用戶界面元素是從一元素列表中選出的,所述元素列表包括列表框、列表框元素、組合框、組合框元素、菜單、菜單元素、多列列表框、多列列表框元素、多列組合框、多列組合框元素、多選擴展列表框、多選擴展列表框元素、文本框、文本框元素、滾動窗格、滾動窗格元素、加選項卡的窗口、加選項卡的窗口元素、日歷、日歷元素、樹、樹元素、窗口、或窗口元素。
11.如權(quán)利要求1所述的方法,其特征在于,擴展所述父元素以使所述用戶界面元素可見還包括使用自頂向下擴展或自底向上擴展。
12.如權(quán)利要求1所述的方法,其特征在于,確保所述用戶界面元素是可選擇的包括確保與所述用戶界面對象相關(guān)聯(lián)的窗口對用戶輸入就緒。
13.如權(quán)利要求12所述的方法,其特征在于,確保與所述用戶界面對象相關(guān)聯(lián)的窗口對輸入就緒包括以下的至少一個給予與所述用戶界面對象相關(guān)聯(lián)的窗口焦點、使與所述界面對象相關(guān)聯(lián)的線程成為前臺線程、或確保沒有另一對象覆蓋在所述用戶界面對象上。
14.如權(quán)利要求1所述的方法,其特征在于,要變得可見的所述用戶界面元素包括一祖父元素,并且其中,自底向上滾動包括滾動所述父元素以使所述用戶界面元素在所述父元素內(nèi)可見;滾動所述祖父元素以使所述父元素在所述祖父元素內(nèi)可見;以及滾動所述父元素以使所述用戶界面元素在所述祖父元素內(nèi)可見。
15.一種儲存用于使計算機系統(tǒng)執(zhí)行如權(quán)利要求1所述的方法的計算機可執(zhí)行指令的計算機可讀介質(zhì)。
16.一種使用戶界面對象可見的方法,所述方法包括從要使用自動化來測試的圖形用戶界面內(nèi)的多個界面對象中選擇一用戶界面對象,所述用戶界面對象在對象分層結(jié)構(gòu)的基底;從基對象開始遍歷所述用戶界面對象分層結(jié)構(gòu)到頂部對象的子對象,滾動當(dāng)前對象的每一父對象,直到所述當(dāng)前對象與所述父對象重疊;從所述基對象開始遍歷所述用戶界面對象分層結(jié)構(gòu)到頂部對象的孫對象,滾動當(dāng)前對象的每一父對象直到所述當(dāng)前對象與祖父對象重疊;以及確保與所述用戶界面對象相關(guān)聯(lián)的窗口對用戶輸入就緒。
17.如權(quán)利要求16所述的方法,其特征在于,滾動還包括在x、y和z方向的至少一個中滾動。
18.一種儲存用于使計算機執(zhí)行如權(quán)利要求16所述的方法的計算機可執(zhí)行指令的計算機可讀介質(zhì)。
19.一種具有用戶界面的計算機系統(tǒng),所述系統(tǒng)包括用戶界面對象,包括多個分層排列的節(jié)點;請求動作模塊,它請求用戶界面對象可見;自動化測試器模塊,它觸發(fā)所述請求動作模塊;遍歷分層結(jié)構(gòu)模塊,它遍歷對象的分層結(jié)構(gòu);擴展模塊,它擴展父對象以使所述用戶界面對象可見;在父對象中定位模塊,它搜索所述父對象的元素以定位所述父對象內(nèi)的子對象;在祖父對象中定位模塊,它滾動所述父對象以使所述子對象在祖父對象中可見;以及窗口就緒模塊,它確保與所述用戶界面對象相關(guān)聯(lián)的窗口準(zhǔn)備好接受用戶輸入。
20.一種用戶界面服務(wù),包括用于使測試程序指定要變得可見的用戶對象元素的裝置,所述用戶對象元素是用戶對象的組件,所述用戶對象是一組分層排列的用戶對象的一部分,是父對象的子對象;用于分層地遍歷所述一組分層排列的用戶對象的裝置;用于滾動父對象以顯示所指定的子對象的裝置;用于滾動父對象以在祖父對象中顯示所指定的子對象的裝置;用于擴展用戶對象以顯示所指定的子對象的裝置;用于搜索用戶對象的元素列表以定位所指定的列表對象的裝置;以及用于確保所指定的子對象可選擇的裝置。
全文摘要
公開了用于確保用戶界面元素在自動化用戶界面測試環(huán)境中可見的各種新穎且非顯而易見的裝置和方法。所公開的實施例之一是用于使用自頂向下滾動、自底向上滾動、擴展或所有三者的組合來定位用戶界面元素的父元素,然后使該用戶界面對象可見的方法。自頂向下滾動將滾動該父對象,直到該用戶界面元素變得可見。自底向上滾動首先定位祖父元素。然后滾動父元素,直到用戶界面元素在父對象內(nèi)可見。然后滾動祖父元素,直到父對象在祖父元素內(nèi)可見,然后滾動父對象直到該用戶界面元素在祖父元素內(nèi)可見。該示例性實施例還通過確保該用戶界面元素所駐留的窗口對用戶輸入就緒并且不被另一對象覆蓋,來確認(rèn)變得可見的用戶界面元素可被選擇。
文檔編號G06F17/30GK1760841SQ20051011633
公開日2006年4月19日 申請日期2005年10月14日 優(yōu)先權(quán)日2004年10月15日
發(fā)明者D·A·克萊門迪弗 申請人:微軟公司