2013-04-14 28 views
3

我創建了一個簡單的HTML表單,其中有兩個具有相同屬性(如名稱,輸入和其他)的對象(編輯框 - 名字)。我在其中一個編輯框中記錄了一個動作,並在Local object repository中添加了對象,Index爲'0'(因爲它在源代碼中的順序)。修改對象庫中的序號標識符值 - QTP

然後,我將Index的值修改爲'1',以便同一對象引用具有相同屬性的第二個編輯框,但不會在QTP中發生。

一旦有序標識符被添加,儘管我們在對象存儲庫中修改了它,並且它在存儲庫中得到更新,我們可以查看它們。但是,修改後的行爲並不像它,即在這種情況下,當我們運行腳本時,它應該引用第二個「名字編輯框」,但它不會發生,爲什麼?

簡要說明我的問題一旦在Object Repository中修改了序號標識符,即使它顯示爲已更新,它也沒有得到真正的更新,爲什麼?

回答

2

QTP中有一個網絡特定的優化,你似乎遇到過。除了常規描述之外,QTP將sourceIndex作爲隱藏屬性存儲。然後,當試圖識別對象時,它將首先檢查存儲的sourceIndex的HTML對象是否與描述匹配,如果它確實假定它是正確的對象並且不搜索整個DOM。

由於序數(在這種情況下,索引)是一個特殊屬性,只有在多個對象匹配時才用於識別,所以sourceIndex優化避開了索引的使用。

在更高版本的QTP中(從我認爲的11開始),QTP還將生成的XPath存儲到具有相似功能的對象。 可以在工具→選項→網絡→高級

screen shot of options

+0

DO /做這些選項默認情況下禁用這些優化,以ON - 永遠不會消失? – TheBlastOne

+0

@TheBlastOne,AFAIK他們默認爲開 - 總是。 – Motti

+1

這個問題是一個很好的例子,爲什麼「使用源索引運行」應該默認爲OFF。如果它在所有情況下都不能正常工作,那麼這不是一種優化,而是一種帶有消極副作用的優化,我們稱之爲BUG :(而且它們非常非常難以找到。 – TheBlastOne