2013-03-27 77 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