2011-08-17 47 views
3

我今天11發現了奇怪的行爲,QTP:表達區分大小寫:用不同的情況不同的結果在VBScipt

Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.ParentNode.ParentNode 

給出錯誤:所需的對象 「.Object.ParentNode」

但表達

Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.parentNode.ParentNode 

是正確的,並沒有任何錯誤,工作正常(在.Object的ParentNode成員的情況下的差異)。

瀏覽器是Firefox。在IE中它工作正常。

有人可以解釋爲什麼會發生?只是爲了興趣。

回答

5

這是一個非常好的(和微妙的)。 一般而言,.Object允許訪問正在測試的應用程序中的本機對象。由於QTP基於VBScript,這意味着.Object測試對象的屬性是IDispatch

使用IE瀏覽器時,QTP可以通過IE公開的MSHTML對象(並支持IDispatch),因爲MSHTML被設計爲使用VBScript,所以這些對象不區分大小寫。但是,在使用Firefox時,瀏覽器沒有提供支持對象的IDispatch。因此QTP必須通過查詢Firefox公開的對象來創建一個實現IDispatch的代理對象。由於Firefox設計用於JavaScript(其中區分大小寫),因此此代理對象會自動區分大小寫。

您看到的錯誤來自於第一個ParentNode返回Empty,因此第二個.ParentNode發生了錯誤。

因此,在Firefox中使用.Object必須使用正確的外殼來訪問您訪問的屬性和方法。

+0

+1,偉大的寫法@Motti – 2011-08-17 20:08:43