Vbscript QTP链接对象不支持Exist属性

Vbscript QTP链接对象不支持Exist属性,vbscript,qtp,Vbscript,Qtp,我对QTP11有个奇怪的问题。到目前为止,以下代码工作正常,但突然停止工作,并抛出不支持此属性或方法的对象:'if Link exist'行的'objPage.Link' Set objBrowser = Browser("creationtime:=" & Desktop.ChildObjects(oDesc).Count - 1 & "") Set objPage = objBrowser.Page("title:=.*") If objPage.Link("class:=m

我对QTP11有个奇怪的问题。到目前为止,以下代码工作正常,但突然停止工作,并抛出不支持此属性或方法的对象:'if Link exist'行的'objPage.Link'

Set objBrowser = Browser("creationtime:=" & Desktop.ChildObjects(oDesc).Count - 1 & "")
Set objPage = objBrowser.Page("title:=.*")
If objPage.Link("class:=menu_link_tab_.*", "html id:=.*DesktopTab").Exist(3) Then
   msgbox "ok"
End If
有人能告诉我什么是错的和/或如何纠正吗

编辑:我解决了这个问题,但仍然不知道发生了什么。我只是从QTP脚本中剪切了这一部分,并将其粘贴到记事本中,然后将其从记事本复制到QTP。一切正常。我没有改变任何事。。。任何关于到底发生了什么的想法都是受欢迎的

另一个编辑:问题随机重新出现。在没有任何更改的情况下,我可以运行测试10次,让它随机失败,并显示“Object不支持此属性或方法”消息

我有一个startBrowser函数,其中我设置了objPage和OBJBBrowser:

Function startBrowser(vURL)
   Dim oDesc
   Set IE = CreateObject("InternetExplorer.Application")

   IE.Visible = True
   IE.Navigate vURL
   Window("hwnd:=" & IE.HWND).Maximize
   Set oDesc = Description.Create
   oDesc( "micclass" ).Value = "Browser"
   If Desktop.ChildObjects(oDesc).Count > 0 Then
       Set objBrowser = Browser("creationtime:=" & Desktop.ChildObjects(oDesc).Count - 1 & "")
   End If
   Set objPage = objBrowser.Page("title:=.*")
End Function
我添加了许多带有GetROProperty的MSGBox,以验证对象是否正常。他们似乎是

现在,单击链接的功能如下所示:

Function clickMainMenuLink(vIdentifier)
   Set objLink = objPage.Link("class:=menu_link_tab_.*", "html id:=.*" & vIdentifier, "index:=0")
   If objLink.Exist(timeOut) Then
       objLink.Click
       Else
       reporter.ReportEvent micFail, "Click the " & vIdentifier & " menu link", "Cannot find the " & vIdentifier & " menu link"
       ExitTestIteration
   End If
End Function
因此,目前我的测试只是打开浏览器,在我尝试调试时单击一个链接,但仍然失败或随机通过。运行错误指示带有“Set objLink”的行。有进一步调试的想法吗?如果有问题,我在QTP11和IE8上。

您的错误不支持此属性或方法:
objPage.Link
问题似乎不在于行的
.Exist
部分,而在于
.Link
部分(您可以通过将行分成两行来验证这一点,并查看哪一行失败)

set objLink = objPage.Link("class:=menu_link_tab_.*", "html id:=.*DesktopTab")
If objLink.Exist(3) Then
从您的评论来看,似乎您正在创建
objPage
的位置与使用它的位置不同,我建议确保对象正常到达。

从您的错误来看,不支持此属性或方法:
objPage.Link
问题似乎不在于行的
部分,而是
.Link
部分(您可以通过将行分成两行来验证这一点,并查看哪一行失败

set objLink = objPage.Link("class:=menu_link_tab_.*", "html id:=.*DesktopTab")
If objLink.Exist(3) Then

从您的评论来看,您似乎在与使用它的位置不同的位置创建了
objPage
,我建议确保对象正常到达。

谢谢莫蒂,您的推理是正确的。问题在于objPage部分。尽管我可以读取函数QTP中objPage的每个属性,但有时qtjust没有将此objPage视为页面对象。我想这与没有显式声明类型有关,但这只是一个猜测。作为一个肮脏的解决方法,我现在在每个函数中设置了objBrowser和objPage,它可以100%工作。

谢谢莫蒂,你的推理是正确的。问题在于objPage部分。尽管我支持uld读取函数中objPage的每个属性QTP有时只是没有将此objPage视为页面对象。我想这与没有明确声明类型有关,但这只是猜测。作为一个肮脏的解决办法,我现在在每个函数中设置了objBrowser和objPage,它可以100%工作。

你说它工作到目前为止,发生了什么变化?您是否更改了QTP/browser的版本?打开的浏览器/登录部分已从功能移动到可重用操作。正是该部分正在设置objBrowser和objPage。If在脚本本身中被调用。您说它工作到目前为止,发生了什么变化?您更改了QTP/browser的版本吗?打开的浏览器/登录部分已从功能移动到可重用操作。它是设置objBrowser和objPage的部分。If在脚本本身中调用。这是我的第一个猜测。我正在三次检查objBrowser和objPage元素是否正确。它们是正确的。正如我在编辑中提到的,我确实将link.exist行复制到记事本并将其粘贴回qtp,这解决了问题。我我不知道原因是什么,因为复制粘贴的行与以前完全相同…这是我的第一个猜测。我正在三次检查objBrowser和objPage元素是否正确。它们是正确的。正如我在编辑中提到的,我确实将link.exist行复制到记事本并将其粘贴回qtp,这解决了问题。我不知道这就是为什么你不接受莫蒂的答案,而是创造了自己的答案并接受了那个答案?那么为什么你不接受莫蒂的答案,而是创造了自己的答案并接受了那个答案呢?