2013-03-27 95 views
2
objecct性能

我有以下的HTML標記,這QTP正確識別爲WebEdit對象:捕獲HTML標籤屬性,如QTP

<input style="width: 228px;" aria-describedby="x-auto-0" _id="Tenant" name="" 
tabindex="1" id="x-auto-23-input" class="x-form-field x-form-text x-form-invalid" 
type="text"> 

我如何從HTML標籤_id屬性爲對象屬性在QTP中?我已使用「對象標識」對話框將_idhtml _id屬性添加到WebEdit類。但是,當我使用Object Spy或Recorder時,它們都不會被填充。

請注意,正在測試的頁面包含許多這些文本輸入,每個文本輸入都帶有空白name但描述性_id。我試圖讓_id成爲WebEdit的一個屬性,所以我可以通過Browser("Browser").Page("Page"),WebEdit("_id:=Tenant")來引用特定的文本框。

回答

3

通過使用.Object.GetAttribute()函數可以獲得HTML屬性。這對於獲得非標準屬性(即「_id」)特別有用。

屬性「id」與運行時對象屬性「html id」對齊,因此可以使用GetROProperty()或上述方法獲取。

使用這些方法的一個例子是下面:

Dim objUI  
Set objUI = Browser("Browser").Page("Page").WebEdit("WebEdit") 
Print objUI.GetROProperty("html id") 
Print objUI.Object.GetAttribute("id") 
Print objUI.Object.GetAttribute("_id") 
Set objUI = Nothing 

要使用描述性編程訪問一個對象,則可以使用attribute/符號以及正則表達式。例如:

Set objUI = Browser("Browser").Page("Page").WebEdit("attribute/_id:=Tenant", "html id:=x-auto-\d*-input") 

默認情況下,調試查看器中的Web元素不公開.Object方法和屬性。可以通過註冊包含在IE8中的Process Debug Manager(PDM)來增強QTP調試。這將幫助您發現使用.Object在QTP中可用的其他屬性和方法。有關在QTP 11提高調試的詳細信息,請參閱下面的文章:http://northwaysolutions.com/blog/qtp-11-how-to-enable-enhanced-debugging-features/

+0

謝謝你的信息布賴恩。我一定會利用增強的調試功能。但是,我真的希望將_id變成可搜索的'WebEdit'屬性,而不僅僅是能夠使用'GetAttribute'。 (我修改了我的問題來澄清這一點。) – 2013-03-27 21:17:48

+0

@JimPfleger謝謝澄清。我已經更新了更完整的答案。 – BrianJM 2013-03-28 13:53:45

+0

這個「屬性/」技巧不適用於Java GUI組件,對吧? – TheBlastOne 2014-03-04 17:23:51

0

我不知道這是否是這樣做的正確的方式,但我可以通過加載全部破解了什麼,我需要的WebEdit對象變成了Dictionary,它們的對象是_id

Dim WebEdit_desc 
Set WebEdit_desc = Description.Create 
WebEdit_desc("micClass").value = "WebEdit" 

Dim WebEdits 
Set WebEdits = CreateObject("Scripting.Dictionary") 

Dim WebEdit_list 
Set WebEdit_list = Browser("Browse Catalog").Page("Add Tenant").ChildObjects(WebEdit_desc) 
Dim i 
For i = 0 to WebEdit_list.Count() - 1 
    If NOT IsNull(WebEdit_list(i).Object.GetAttribute("_id")) Then 
     WebEdits.Add WebEdit_list(i).Object.GetAttribute("_id"), WebEdit_list(i) 
    End If 
Next 
Set WebEdit_list = Nothing 

WebEdits.Item("Tenant").Set DataTable("Tenant", dtLocalSheet) 
2

您可以使用attribute/customAttributeKey:=customAttributeValue標識符獲取具有自定義屬性(屬性)的對象。你的情況:

Set TenantWebEdit = Browser("Browser").Page("Page").WebEdit("attribute/_id:=Tenant") 

這也可以讓你把更多的標識符,如果你想做出獨特的描述:

Set TenantWebEdit = Browser("Browser").Page("Page").WebEdit("attribute/_id:=Tenant", "class:=.*x-form-text.*") 
+0

對於QTP11,'attribute/_id:= Tenant'語法沒有找到任何對象。還有什麼我需要做的這個工作?我知道它正在收集屬性,因爲@ BrianJM的'objUI.Object.GetAttribute(「_ id」)'給出了'租戶'。 – 2013-03-28 14:19:26

+1

@JimPfleger您是否擁有多個具有屬性「_id」=「Tenant」的對象?如果是這樣,您需要進一步定義描述性編程爲唯一的(或使用帶有描述對象的ChildObjects()方法) – BrianJM 2013-03-28 19:55:34

+0

No' _id'是一個唯一的標識符,我不知道他們爲什麼不把它放在'name'中。 – 2013-03-28 23:45:26

0

爲了從瀏覽器文檔財產

Msgbox browser("creationtime:=0").Page("index:=0").GetROProperty("attribute/lang")

+1

你能解釋你的答案嗎? – Suresh 2015-12-14 07:58:10

+0

@eirenaios這使用dom屬性 它檢查對象dom,並從dom返回lang屬性值, 您可以使用.GetroProperty(「屬性/ ID」)或.GetroProperty(「屬性/ UniqueID」) 以獲得唯一對象的ID – Arvind 2017-01-19 07:50:04

+1

它從瀏覽器文檔元素提取lang屬性..Browser(「creationtime:= 0」)。Page(「index:= 0」).Object.documentElement.lang – Arvind 2017-01-19 08:10:59