Ready Test? Go, Go, Go !!!
           

          關(guān)注測試,也關(guān)注成長

          公告
          • 關(guān)注軟件測試自動化,性能測試。
            目前負(fù)責(zé)醫(yī)療軟件功能測試以及
            測試過程改進(jìn)

          日歷
          <2008年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          2425262728291
          2345678
          統(tǒng)計(jì)
          • 隨筆 - 22
          • 文章 - 0
          • 評論 - 87
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(17)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           


          出處:http://blog.163.com/lilei_0207/blog/static/306754920079242641852/

          1. 不能識別對象(Cannot identify object

          出現(xiàn)了這個(gè)錯(cuò)誤時(shí),就表示當(dāng)前被測程序的窗口中沒有符合條件的對象。

          出現(xiàn)這種錯(cuò)誤,可能的原因有以下兩種:

          >>> 對象此時(shí)在程序中沒有顯示或不存在。

          >>> 在程序中存在該對象,但是它的描述在后來發(fā)生了改變,導(dǎo)致與對象倉庫中存儲的信息不匹配,從而QTP無法識別對象。

          如果你正遇到“Cannot identify object”的問題,解決方法見1.1

          1.1 如何去識別對象描述(Identifying Test Object Description Problems

              如果你能在被測程序中看到對象,但仍出現(xiàn)了“Cannot Identify Object”錯(cuò)誤信息,這就表示倉庫中對象的描述與程序中對象的描述一定存在著差異。

              解決對象描述問題的第一步是找到差異,最簡單的方法是將倉庫中對象的屬性值與程序中對象的屬性值進(jìn)行比較。(倉庫中對象的屬性值可在Object Repository窗口中查看,程序中對象的屬性值可用Object Spy功能查看。)

          比較倉庫中對象的屬性值與程序中對象的屬性值的操作見1.3

          在完成比較后,是否發(fā)現(xiàn)存在差異?

          如果是,請參考1.4

          如果否,請參考1.5 

          1.2 處理對象丟失問題(Solving Missing Object Problems

          在運(yùn)行腳本時(shí),QTP嘗試進(jìn)行某種操作,而該操作的對象在程序中卻沒有出現(xiàn),出現(xiàn)這種情況的原因有以下幾種:

          >>> 對象不再存在。對象已經(jīng)被從程序中刪除。

          解決方法:見1.2.1

          >>> 對象還沒有裝載。

          解決方法:見1.2.2

          >>>當(dāng)前的程序頁面(或窗口)不正確,不是對象所在的頁面(或窗口)。

          解決方法:見1.2.3

          >>>前一個(gè)步驟沒有正確執(zhí)行。

          解決方法:見1.2.3

          1.2.1 解決對象不再存在的問題

          如果對象已經(jīng)不再在被測程序中存在,則應(yīng)在腳本中修改或刪除相關(guān)步驟。

          1.2.2 解決對象裝載超時(shí)的問題

          如果對象丟失的原因是因?yàn)闆]有足夠的時(shí)間裝載,嘗試以下解決方案:

          a.對于Web對象,增加Browser Navigation TimeoutFile>Setting>Web頁簽)時(shí)間。

          b.在包括該對象的步驟前使用Wait語句,讓QTP在執(zhí)行該步驟之前等待一段時(shí)間。

          1.2.3 檢查前面步驟的執(zhí)行情況

          如果是因?yàn)榇蜷_了錯(cuò)誤的頁面(或窗口)導(dǎo)致對象丟失問題,或因?yàn)榍耙徊襟E執(zhí)行措誤導(dǎo)致對象丟失問題,則請按以下方法檢查原因:

          a. 如果懷疑在完成腳本后,被測程序又發(fā)生了改變,則檢查對象的繼承關(guān)系以及對象描述。參考1.1

          b. 如果懷疑腳本錯(cuò)誤,則檢查腳本的每一個(gè)步驟。你可能是遺失了某個(gè)步驟,也可能是使用了不正確的方法或參數(shù)

          1.3 測試對象的屬性值與Run-time對象的屬性值的比較(Comparing Test Object and Run-Time Object Property Values

          根據(jù)以下的步驟比較測試對象與Run-time對象的屬性值:

          1) 進(jìn)入Obecjt Repository窗口(Resources>Object Repository),選擇對象。

          2) 用筆記下對象的class以及它的各個(gè)屬性及屬性值。

          3) 打開被測程序,并打開包含被測對象的頁面或窗口。

          4) QTP中選擇菜單Tools>Object Spy或點(diǎn)擊Object Spy按鈕,打開Object Spy對話框。

          5) 選擇“Test Object Properties”選項(xiàng)。

          6) 點(diǎn)擊右上角的按鈕(帶有手圖標(biāo)的),這時(shí)QTP窗口以及Object Spy對話框都被最小化。

          7) 在程序頁面(或窗口)中點(diǎn)擊目標(biāo)對象,恢復(fù)Object Spy對話框,并在對話框中顯示對象及其父對象(以樹的形式顯示),并在Properties頁簽中顯示當(dāng)前對象的屬性及屬性值。

          8) 這時(shí)Object Spy對話框的Properties頁簽中顯示Run-time對象的所有屬性,在此查看對象的class,以及它的屬性及屬性值,并將它與第2步中記下的內(nèi)容進(jìn)行比較。 

          1.4 解決對象描述存在的問題(Solving Object Descrīption Problems

              如果發(fā)現(xiàn)倉庫中對象的屬性值與程序中對象的屬性值存在不同,你應(yīng)該判斷這個(gè)不同是個(gè)別對象的問題,還是其它同類對象也存在相同的問題。

          是所有(或多個(gè))同類對象都存在問題嗎?

          如果是,則參考1.6

          如果否,則參考1.7 

          1.5 關(guān)于父對象描述的識別問題(Identifying Parent Object Descrīption Problems

          對象的識別還與它所繼承的父對象有關(guān)。

              如果你能在被測程序中看到對象,而且程序中對象的屬性值與倉庫中對象的屬性值也是一致的,但仍然遭遇到了“Cannot identify object”錯(cuò)誤,則這個(gè)錯(cuò)誤可能與它的父對象有關(guān)(如倉庫中父對象的屬性值與程序中父對象的屬性值不一致),也可能是倉庫中的對象與程序中對象的繼承關(guān)系不相同導(dǎo)致的。

          要判斷是繼承關(guān)系中的哪個(gè)父對象出現(xiàn)了問題,請償試下面的方法之一:

          >>>重新錄制對象,比較新舊對象的父對象。

          欲了解如何完成比較,參考1.8

          >>>對繼承關(guān)系中的每個(gè)父對象,分別插入一個(gè)Exist語句,并運(yùn)行該部分腳本。

          欲了解如果創(chuàng)建Exist語句,參考1.9

          注:你也可以使用Object Repository窗口中的Highlight in Application功能,在被測程序中定位對象。

          一旦找到了存在問題的父對象,接下來償試以下方法:

          >>>修復(fù)存在問題的父對象的描述。方法見1.4

          >>>在專家視圖的模式下,查找所有繼承存在問題的實(shí)例并進(jìn)行修正。

          舉例:1.8.1 

          1.6 解決某類對象的識別問題(Soving Object Identification Problems for a Test Object Class

              如果你發(fā)現(xiàn)某類對象的對象描述對于被測程序來說都不是很合理,或你預(yù)期到對象描述中的某屬性值是經(jīng)常變化的,你可以在Object Identification對話框中改變該類的識別屬性的設(shè)置,或定義該類的Smart Identification設(shè)置并啟用Smart Identification機(jī)制,這樣QTP就可以唯一識別對象了。

          1.7 解決單個(gè)對象的描述問題(Solving Individual Test Object Description Problems

          選擇下列方法之一來解決對象的描述問題:

          >>>如果被測程序中對象描述發(fā)生了改變,并且你也清楚改變的內(nèi)容,并且該改變是永久性或長期性的,你可以直接手工修改倉庫中對象描述中的相關(guān)屬性值。

          >>>如果被測程序中的對象的屬性值依賴于前面的步驟或其它對象,則將該屬性值參數(shù)化,這樣就可以使用其它步驟的輸出值為屬性值。

          >>>如果屬性值的組成部分中,部分是固定的,部分是動態(tài)改變的,則可以將屬性值設(shè)計(jì)為正則表達(dá)式。

          >>>如果屬性值是遵循某種規(guī)則變化的,或者是不可預(yù)期的,則從對象描述中移除該屬性,并向?qū)ο竺枋鲋刑砑右粋€(gè)或多個(gè)屬性以便于QTP進(jìn)行對象識別。

          >>>If you can only access the information on the property values during the run session, you can create and use functions that use programmatic descriptions to identify the object using property values retrieved earlier in the run session.

          For more information on programmatic descriptions, see Using Programmatic Descriptions.

          >>>如果在錄制過程中對象是唯一的,但現(xiàn)在程序中出現(xiàn)了兩個(gè)或多個(gè)描述相同的對象,但是它們在頁面(或窗口)中的位置不相同,則應(yīng)在Object PropertiesObject Repository窗口中,向?qū)ο竺枋鲋刑砑右粋€(gè)ordinal identifierindexlocation)。

           

          1.8 重新錄制對象,以判斷父對象描述是否存在問題(Re-recording an Object to Identify Parent Object Description Problems

          根據(jù)下面的指引,來判斷父對象的問題。

          通過重新錄制對象,來判斷它的父對象是否存在問題:

          1) 打開瀏覽器或程序,來到包含被測對象的頁面或窗口。

          2) 在關(guān)鍵字視圖模式,選擇最后一個(gè)組件(component),或在專家視圖模式,將光標(biāo)放在最后一個(gè)腳本步驟的下面。

          3) 點(diǎn)擊Record按鈕,或選擇Automation>Record

          4) 點(diǎn)擊(或操作)頁面或窗口中的目標(biāo)對象。

          5) 點(diǎn)擊Stop按鈕,或選擇Automation>Stop,完成步驟添加。

          6) 右擊新添加的步驟,并選擇Object Properties右鍵菜單。

          7) Object Properties對話框中,點(diǎn)擊Repository,打開Object Repository窗口,并選中了新對象。注意記下該對象的繼承關(guān)系。

          8) Object Repository窗口中找到舊的對象(即存在問題的對象),將它的繼承關(guān)系與新對象的繼承關(guān)系進(jìn)行比較。

          通過比較,可以檢查到新舊對象是父對象的描述存在不同,還是它們的繼承關(guān)系根本就不同。

          a. 如果是父對象的描述問題,則修改父對象的描述。參見1.4.

          b. 如果是對象的繼承關(guān)系不正確(即具有不同的父對象)引起的問題,則在腳本中找到所有使用該繼承關(guān)系的實(shí)例,將它們替換為正確的繼承關(guān)系。

          舉例:參見1.8.1

          1.8.1 舉例

              假設(shè)有一個(gè)帶有Frame的網(wǎng)站,你錄制了一個(gè)操作針對Image對象“Poster”的操作步驟。在Object Repository窗口,你可以Image對象的繼承關(guān)系如下所示:

          MyCompanyBrowser

              MyCompanyPage

                  Main(Frame)

                       Poster(image)

              當(dāng)你運(yùn)行腳本時(shí),網(wǎng)頁看起來沒有什么不同,但是識別Image對象時(shí)卻出現(xiàn)了“Cannot identiry object”的錯(cuò)誤提示。當(dāng)你重新錄制操作步驟,然后在Object Repository窗口中查看新的Image對象時(shí),發(fā)現(xiàn)該對象的繼承關(guān)系如下所示:

          MyCompanyBrowser

              MyCompanyPage

                   Poster(image)

              從中可以看出,Frame已經(jīng)從Web Page中移除,所以盡管Image對象“Poster”的描述沒有發(fā)生任何改變,但它的繼承關(guān)系已經(jīng)改變了。

              Object Repository窗口,你可以看到新舊Image對象“Poster”是兩個(gè)完全不同的對象:舊的位于已經(jīng)被移除的Frame對象之下,而新的則直接位于PageMycompany”對象之下。

              修復(fù)這個(gè)問題,可以在腳本步驟中將舊的對象替換為新的對象。

              為了保持Object Repository窗口的整潔,你應(yīng)刪除那些已不再存在的對象(如本例中的Frame)。

          1.9 創(chuàng)建Exist語句,以判斷父對象的描述是否存在問題

              QTP在錄制發(fā)生在某個(gè)對象上的操作時(shí),也會同時(shí)去了解對象以及它的繼承關(guān)系。因此,如果在運(yùn)行過程中,QTP不能識別繼承關(guān)系中的任何一個(gè)父對象,都會導(dǎo)致目標(biāo)對象的識別失敗。

              使用帶有Exist方法的Msgbox語句,可以方便的檢查出是繼承關(guān)系中的哪個(gè)父對象出現(xiàn)了問題。

              假設(shè)在運(yùn)行下面腳本時(shí),你遇到了“Cannot identify Object”錯(cuò)誤信息(但是可以確定對象倉庫中Link對象的描述與當(dāng)前程序中對象的描述是完全一致的):

          Browser("Yahoo!").Page("Yahoo!").Link("Arts & Humanities").Click

          你可以在該語句前面插入以下語句:

          Msgbox Browser("Yahoo!").Exist

          Msgbox Browser("Yahoo!").Page("Yahoo!").Exist

          Msgbox Browser("Yahoo!").Page("Yahoo!").Link("Arts & Humanities").Exist

          然后你從頭開始運(yùn)行腳本,發(fā)現(xiàn)第1行語句運(yùn)

              但是,當(dāng)QTP運(yùn)行到第2步時(shí),就彈出信息框,內(nèi)容為“False”,表示不能找到Page object。這就證明Page對象存在問題。

              確定了出現(xiàn)問題的父對象以后,修復(fù)該問題。參見1.4

          2. 對象不唯一(The object is not unique

          在被測頁面或窗口中的同一父對象下,找到多個(gè)與倉庫中對象描述相符的Run-tim對象。

          請確定是只有個(gè)別對象存在此問題,還是此類對象的所有對象(或部分對象)存在此問題。

          此類對象的所有對象(或部分對象)都存在此問題嗎?

          如果是,參考2.1

          如果否,參考2.2 

          2.1 為某對象類設(shè)置能唯一識別對象的描述規(guī)則(Configuring Unique Test Object Descrīptions for a Test Object Class

              如果你發(fā)現(xiàn)某類對象的對象描述都不足以唯一識別對象,你可以在Object Identification對話框中,改變該類的識別屬性的設(shè)置,或定義該類的Smart Identification設(shè)置并啟用Smart Identification機(jī)制,這樣QTP就可以唯一識別對象了。

           

          2.2 設(shè)置通唯一識別對象的對象描述(Creating a Unique Test Object Descrīption for an Object

          查看當(dāng)前對象的描述,并償試在程序中找到其它具有相同描述的對象并查看它們的描述。

          >>>如果你找到了可以將它們區(qū)別開來的一個(gè)或多個(gè)屬性,則修改倉庫中對象的相關(guān)屬性(如向描述中添加屬性等),以使QTP在運(yùn)行時(shí)可以唯一識別它。

          >>>如果它們的識別屬性完全相同,則在對象描述中為對象添加一個(gè)ordinal identifierindexlocation)。 

          3. 找不到父對象(Parent not found

          識別對象時(shí),會先識別它的父對象是否正確。如果遇到“Parent not found”的錯(cuò)誤信息,請償試以下解決方法:

          >>>修復(fù)出現(xiàn)問題的父對象的描述。參見1.4

          >>>在腳本中找到繼承關(guān)系不正確的實(shí)例,并修改為正確的繼承關(guān)系。例如1.8.1

          4. 無效的參數(shù)(Invalid arguments

          一個(gè)或多個(gè)方法的參數(shù)是無效的。

          參數(shù)無效可能是參數(shù)類型錯(cuò)誤,也可能是參數(shù)個(gè)數(shù)不正確。

          根據(jù)以下建議,找到方法的正確語法:

          >>>Keyword模式,如果方法包括參數(shù),則在Value欄會顯示該方法的參數(shù)提示。

          >>>Expert模式,如果方法包括參數(shù),則當(dāng)你插入方法然后按下Shift+Ctrl+Space鍵時(shí),QTP會顯示該方法的參數(shù)的提示信息。(注:只有在Editor Options對話框的General頁簽中打開了Statement completion功能時(shí)才可以看到參數(shù)的提示信息。) 

          5. 不能識別itemCannot identify item

          QTP不能識別方法參數(shù)中指定的列表或樹對象的item時(shí),請確認(rèn)指定的item是否存在于對象之中。

          >>>如果item不存在,則刪除相關(guān)腳本步驟,或修改item

          >>>如果item存在,但被測程序中它的名字發(fā)生了改變,則修改item的名稱,或在腳本中使用itemindex而不是名字(如“#4”)。

          注意,不同的對象或方法,它們使用index的語法可能不同。 

          6. 對象的item不唯一(The object’s item is not unique

          在列表或樹對象中,可能有多個(gè)名字相同的item

          在這種情況下,可以指定item使用index(例如“#4”)。 

          7. 運(yùn)行失敗(Test run failed

          測試運(yùn)行失敗,還有可能是其它未知錯(cuò)誤造成的。檢查出現(xiàn)錯(cuò)誤時(shí)的腳本步驟。

          如果錯(cuò)誤出現(xiàn)在執(zhí)行檢查點(diǎn)或輸出值時(shí),請查閱關(guān)于檢查點(diǎn)與輸出值的幫助。

          如果錯(cuò)誤出現(xiàn)在使用外部文件時(shí),如數(shù)據(jù)庫表、數(shù)據(jù)庫、環(huán)境變量文件、或關(guān)聯(lián)倉庫文件等,則檢查是否可以正常獲取并使用文件,或這些文件的存儲格式是否正確。

          如果錯(cuò)誤出現(xiàn)在完成某個(gè)腳本動作時(shí),請參考QuickTest Object Model Reference幫助,以確認(rèn)方法或函數(shù)的使用是否正確。

          如果錯(cuò)誤出現(xiàn)在執(zhí)行一個(gè)標(biāo)準(zhǔn)的VBscrīpt語句時(shí),參考Microsoft VBscrīpt Reference以獲得幫助。

          posted on 2008-02-15 14:13 Cinderella 閱讀(1916) 評論(0)  編輯  收藏 所屬分類: 功能測試他山之玉
           
          Copyright © Cinderella Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 诸城市| 长乐市| 乐亭县| 上虞市| 江口县| 米泉市| 新泰市| 利川市| 清镇市| 德阳市| 武鸣县| 嫩江县| 抚顺县| 巫溪县| 蒙阴县| 前郭尔| 上高县| 海兴县| 韶山市| 龙井市| 五峰| 上杭县| 伊通| 辉南县| 宜黄县| 宜都市| 毕节市| 兴文县| 曲靖市| 潮安县| 云安县| 德格县| 团风县| 博兴县| 凤城市| 西藏| 山阳县| 资阳市| 吴江市| 馆陶县| 若尔盖县|