在QTP中将HTML标记属性捕获为objecct属性

在QTP中将HTML标记属性捕获为objecct属性,qtp,Qtp,我有以下HTML标记,QTP将其正确标识为WebEdit对象: <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标记中的\u id属性转换为QTP中的对象属性?我使用对象

我有以下HTML标记,QTP将其正确标识为
WebEdit
对象:

<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标记中的
\u id
属性转换为QTP中的对象属性?我使用对象标识对话框将
\u id
html\u id
属性添加到
WebEdit
类中。但是,当我使用Object Spy或Recorder时,两者都没有填写


请注意,正在测试的页面包含许多这样的文本输入,每个输入都有一个空白的
名称
,但具有描述性的
\u id
。我正试图将
\u id
放入WebEdit的一个属性中,这样我就可以通过
浏览器(“浏览器”)引用特定的文本框。使用
.Object.GetAttribute()
函数可以获得页面(“页面”)、WebEdit(“id:=Tenant”)
的HTML属性。这对于获取非标准属性(即“\u id”)特别有用

属性“id”与运行时对象属性“html id”对齐,因此可以使用
getroperty()
或上述方法获得该属性

使用这些方法的示例如下:

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
要使用描述性编程访问对象,可以使用
属性/
符号以及正则表达式。例如:

Set objUI = Browser("Browser").Page("Page").WebEdit("attribute/_id:=Tenant", "html id:=x-auto-\d*-input")
默认情况下,调试查看器中的web元素不公开.Object方法和属性。通过注册IE8中包含的过程调试管理器(PDM),可以增强QTP调试。这将帮助您使用
.Object
发现QTP中可用的其他属性和方法。有关在QTP11中增强调试的更多信息,请参阅以下文章:

我不知道这样做是否正确,但我可以通过将所有
WebEdit
对象加载到键入其
\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)

您可以使用
属性/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.*")

从浏览器文档中提取lang属性的步骤


Msgbox浏览器(“creationtime:=0”)。页面(“index:=0”)。GetROProperty(“attribute/lang”)

感谢您提供的信息。我肯定会使用增强的调试。但是,我确实希望将_id放入可搜索的
WebEdit
属性中,而不仅仅是能够使用
GetAttribute
。(我修改了我的问题来澄清这一点。)@JimPfleger谢谢你的澄清。我已经更新了更完整的答案。对于QTP11,
属性/\u id:=Tenant
语法没有找到任何对象。我还有什么需要做的吗?我知道它正在收集属性,因为@BrianJM的
objUI.Object.GetAttribute(“\u id”)
给出了
Tenant
@JimPfleger是否有多个属性为“\u id”=“Tenant”的对象?如果是这样,您需要进一步定义描述性编程以使其唯一(或者对描述对象使用ChildObjects()方法).No
\u id
是唯一的标识符。我不知道他们为什么不把它放在
name
属性中/“这个技巧对Java GUI组件不起作用,对吗?@TheBlastOne我怀疑它是Web组件的一个功能,所以我认为它对Java不起作用。你能解释一下你的答案吗?@eirenaios这使用它在对象dom中检查的dom属性,并从dom返回lang属性值,类似地,你可以使用.GetroProperty(“属性/id”)或.GetroProperty(“attribute/UniqueID”)获取对象的唯一id从浏览器文档元素中提取lang属性。.Browser(“creationtime:=0”).Page(“index:=0”).Object.documentElement.lang请编辑问题并将此解释添加到其中,以便用户更好地理解它。