无法通过 URL 识别框架
Can't identify frame by URL
我正在使用 GetRoProperty
方法获取框架的 URL 和 HTML ID,并使用相同的值通过描述性编程来识别对象。
QTP 使用 HTML ID 识别对象,但当它使用 URL 识别其节目时
Cannot identify the object "[ Frame ]" (of class Frame). Verify that
this object's properties match an object currently displayed in your
application.
Line (24): "print Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("url:="&rourl).GetROProperty("html id")".
在 OR 中,QTP 只使用 URL 来识别帧,没有任何其他属性。
以下是涉及的代码行:
rourl=Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("Frame").GetROProperty("url")
print rourl
roid=Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("Frame").GetROProperty("html id")
print roid
print Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("html id:="&roid).GetROProperty("html id")
'prints html id
print Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("url:="&rourl).GetROProperty("html id")
'shows error message
url 帧是 http://part1.part2.part3.part4.com:8082/sap(bD1FTiZjPTUwMCZpPTEmZT1WRVZUVkY5Rk1rVkJWVlJQTVRJM01USmZWY3gxMlR4aUNVRGhBSUFBQ2hvd2NnJTNkJTNk)/bc/bsp/sap/crm_ui_frame/bspwdapplication.do?popup-name=_POPUP0001&wcf-request-ticket=929D13152F6D62ACF1AB51BD8BDC2819
我已经将 url 修改为
http://part1\.part2\.part3\.part4\.com:8082/sap\(bD1FTiZjPTUwMCZpPTEmZT1WRVZUVkY5Rk1rVkJWVlJQTVRJM01USmZWY3gxMlR4aUNVRGhBSUFBQ2hvd2NnJTNkJTNk\)/bc/bsp/sap/crm_ui_frame/bspwdapplication\.do\?popup-name=_POPUP0001&wcf-request-ticket=929D13152F6D62ACF1AB51BD8BDC2819
但还是不能识别。
rourl="http://part1\.part2\.part3\.part4\.com:8082/sap\(bD1FTiZjPTUwMCZpPTEmZT1WRVZUVkY5Rk1rVkJWVlJQTVRJM01USmZWY3gxMlR4aUNVRGhBSUFBQ2hvd2NnJTNkJTNk\)/bc/bsp/sap/crm_ui_frame/bspwdapplication\.do\?popup-name=_POPUP0001&wcf-request-ticket=929D13152F6D62ACF1AB51BD8BDC2819"
Browser("SAP - [Search: Accounts]").Window("Select Transaction Type").Page("Select Transaction Type").Frame("url:="&rourl).GetROProperty("html id")
问题可能是由于描述性编程使用正则表达式而对象存储库默认不使用正则表达式。
您的 URL 可能包含特殊字符,当作为正则表达式查看时,这些字符具有不同的含义。
URL 中最明显的正则表达式特殊字符是 .
和 ?
。我认为您对 ?
有疑问(因为 .
匹配 "."
但它可能会导致歧义。
试试这个:
Function EscapeRegex(str)
str = Replace(str, "?", "\?")
str = Replace(str, ".", "\.")
EscapeRegex = str
End Function
print Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("html id:="& EscapeRegex(roid)).GetROProperty("html id")
如果这不能解决您的问题,请在 EscapeRegex
函数中添加特殊字符,如果仍然无法正常工作,请 post 一个示例 URL导致这个问题。
这里有一个(部分?)特殊正则表达式字符列表供参考:
[]*.?+^$()|{}\
(这里是 how it's done in javascript)。
我正在使用 GetRoProperty
方法获取框架的 URL 和 HTML ID,并使用相同的值通过描述性编程来识别对象。
QTP 使用 HTML ID 识别对象,但当它使用 URL 识别其节目时
Cannot identify the object "[ Frame ]" (of class Frame). Verify that this object's properties match an object currently displayed in your application.
Line (24): "print Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("url:="&rourl).GetROProperty("html id")".
在 OR 中,QTP 只使用 URL 来识别帧,没有任何其他属性。
以下是涉及的代码行:
rourl=Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("Frame").GetROProperty("url")
print rourl
roid=Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("Frame").GetROProperty("html id")
print roid
print Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("html id:="&roid).GetROProperty("html id")
'prints html id
print Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("url:="&rourl).GetROProperty("html id")
'shows error message
url 帧是 http://part1.part2.part3.part4.com:8082/sap(bD1FTiZjPTUwMCZpPTEmZT1WRVZUVkY5Rk1rVkJWVlJQTVRJM01USmZWY3gxMlR4aUNVRGhBSUFBQ2hvd2NnJTNkJTNk)/bc/bsp/sap/crm_ui_frame/bspwdapplication.do?popup-name=_POPUP0001&wcf-request-ticket=929D13152F6D62ACF1AB51BD8BDC2819
我已经将 url 修改为
http://part1\.part2\.part3\.part4\.com:8082/sap\(bD1FTiZjPTUwMCZpPTEmZT1WRVZUVkY5Rk1rVkJWVlJQTVRJM01USmZWY3gxMlR4aUNVRGhBSUFBQ2hvd2NnJTNkJTNk\)/bc/bsp/sap/crm_ui_frame/bspwdapplication\.do\?popup-name=_POPUP0001&wcf-request-ticket=929D13152F6D62ACF1AB51BD8BDC2819
但还是不能识别。
rourl="http://part1\.part2\.part3\.part4\.com:8082/sap\(bD1FTiZjPTUwMCZpPTEmZT1WRVZUVkY5Rk1rVkJWVlJQTVRJM01USmZWY3gxMlR4aUNVRGhBSUFBQ2hvd2NnJTNkJTNk\)/bc/bsp/sap/crm_ui_frame/bspwdapplication\.do\?popup-name=_POPUP0001&wcf-request-ticket=929D13152F6D62ACF1AB51BD8BDC2819"
Browser("SAP - [Search: Accounts]").Window("Select Transaction Type").Page("Select Transaction Type").Frame("url:="&rourl).GetROProperty("html id")
问题可能是由于描述性编程使用正则表达式而对象存储库默认不使用正则表达式。
您的 URL 可能包含特殊字符,当作为正则表达式查看时,这些字符具有不同的含义。
URL 中最明显的正则表达式特殊字符是 .
和 ?
。我认为您对 ?
有疑问(因为 .
匹配 "."
但它可能会导致歧义。
试试这个:
Function EscapeRegex(str)
str = Replace(str, "?", "\?")
str = Replace(str, ".", "\.")
EscapeRegex = str
End Function
print Browser("SAP - [Search: Accounts]").Window("Partner Selection Document").Page("Partner Selection Document").Frame("html id:="& EscapeRegex(roid)).GetROProperty("html id")
如果这不能解决您的问题,请在 EscapeRegex
函数中添加特殊字符,如果仍然无法正常工作,请 post 一个示例 URL导致这个问题。
这里有一个(部分?)特殊正则表达式字符列表供参考:
[]*.?+^$()|{}\
(这里是 how it's done in javascript)。