任何机构都可以向我建议一个我可以在QTP中用于以下场景的功能......
由于我们的脚本显示错误,因此有时会导致页面导航。为此,我们使用wait(time)
函数,但它是QTP控件等待的固定时间。我想使用一个函数(我听说过同步函数,但不知道如何使用它),这样QTP只等待时间,导航时间(不多于/少于它)。
答案 0 :(得分:6)
处理这种情况的标准方法是使用Page(或某些情况下是Browser)对象的.Sync方法。
我发现它很有气质,根据测试的应用程序,这个功能可能会完美运行,而在另一个场合不会等待足够长的时间。
问题似乎主要与Web 2.0应用程序(基于AJAX)有关。与java服务器的网页连接通常比java脚本打开的异步连接早得多。
如果有一个可视指南指示该页面仍在加载,您可以编写一个循环并检查该对象。一旦对象消失,您就可以恢复测试执行。
为了节省您自己在需要同步的每个地方编写此代码,您可以使用以下代码覆盖QTP本机方法:
RegisterUserFunc "Page", "Sync", "SyncToPage"
Function SyncToPage(oPage)
'Call native function first'
oPage.Sync
'Custom sync code'
End Function
谢谢, 马切伊
答案 1 :(得分:2)
同步功能就是您想要的。您可以通过多种方式使用它,例如:
考虑GUI中发生的事情,以指示操作已完成。此特定对象和/或属性是您要同步的内容。
http://qtp.blogspot.com/2007/09/qtp-sync-wait-and-synchronization.html
其他选项包括使用WaitProperty
和Exist
命令将脚本与应用程序同步。
http://www.sqaforums.com/showflat.php?Number=555273
QTP功能参考应有助于使用这些功能并解释所使用的参数。如果您仍有问题,请发布一个代码段,以便我们查看。
答案 2 :(得分:1)
WaitProperty Method是此方案的最佳解决方案。
在继续执行下一步之前,等待指定的对象属性达到指定值或超过指定的超时。
返回值:布尔值。如果属性达到值,则返回TRUE;如果在属性达到值之前达到超时,则返回FALSE。 FALSE返回值不表示失败的步骤。
答案 3 :(得分:0)
确保最好的方法是在新页面的对象上使用Exists(timeout)
。
答案 4 :(得分:0)
''使用此功能,只要你想等到obj就绪
Public Function WaitforObject(ByRef objRef, intWaitSecs)
WaitforObject= False
blnFlag= False
intCount=1
If ISObject(objRef) Then
For iWaitSecs = 1 to intWaitSecs
blnFlag = objRef.Exist(1)
If blnFlag Then
Do While (LCase(Trim(objRef.getROProperty("attribute/readyState")))<>"complete") or (Trim(objRef.getROProperty("attribute/readyState"))<>"4" )
If intCount= intWaitSecs Then
WaitforObject = True
Exit Do
End If
intCount=intCount+1
Loop
Exit For
End If
Next
If Not blnFlag Then
wait 2
WaitforObject = True
End If
End If
End Function
答案 5 :(得分:0)
例如
浏览器()。()页。链路()。点击()
浏览器()。同步
这是一个很棒的功能
Public Sub Synchronize (ByVal objObject)
'------------------------------------------------------
Dim Counter
Counter = 0
'------------------------------------------------------
If objObject.Exist(1) Then
'------------------------------------------------------
' Clear Error if any ...
Err.Clear
On Error Resume Next
' Browser sync ...
objObject.Sync
'------------------------------------------------------
If Err.Number <> 0 Then
While (Err.Number <> 0 and Counter <= 100)
Err.Clear
On Error Resume Next
objObject.Sync
Counter = Counter + 1
wend
End If
'------------------------------------------------------
Else
'QTPGenerateReporter "Check Browser - Synchronize Function", "Should Exist", "Does not Exist", "Fail", "-"
End If
End Sub
RegisterUserFunc "Browser", "Synchronize", "Synchronize"
RegisterUserFunc "Page", "Synchronize", "Synchronize"
'================================================================================================================
答案 6 :(得分:0)
我按照下面的方法使用了一些东西,基本上做了一个循环来检查 如果页面上的元素存在,一旦它存在,您可以退出循环并继续测试。
但是,如果元素不存在,你不希望陷入无限循环,因此我有 添加了另一个条件,在放弃之前检查了一定次数。
如果达到了最大重试次数,或者找到了该元素,则退出该循环。
示例代码:
Dim blnPageElementReady, intmaxRetryAttempts, x
blnPageElementReady = False
intMaxRetryAttempts = 10
x = 0
Do Until (blnPageElementReady = True OR intMaxRetryAttempts = x)
If Browser("b").Page("p").WebElement("SomeValue").Exist Then
blnPageElementReady = True
End If
x = x + 1
Loop
If intMaxRetryAttempts = x Then
' Exit Test code goes here.....
End If
' continue with test on page:
Browser("Home_2").Page("Home").WebEdit("ctl00$uxMNJDefaultContentPlace").Click
Browser("Home_2").Page("Home").WebEdit("ctl00$uxMNJDefaultContentPlace").Set username
Browser("Home_2").Page("Home").WebEdit("ctl00$uxMNJDefaultContentPlace_2").Click
答案 7 :(得分:0)
嗨,我希望这可能有所帮助。这里首先检查对象(webelement)是否存在,然后检查它是否已禁用,然后它调用同步,因此最好用于等待。谢谢 可用于各种网页控件。
Set NavigationTab = Browser ().Page().WebElement()
PerformWait ( 10 , 10 , NavigationTab )
Function PerformWait ( intDisableTime , intDelay , object )
if CheckExist ( intDelay , object ) Then
if ValidateDisabled ( object , intDisableTime ) Then
object.Sync
Reporter.ReportEvent 0 , "Element is ready to use" , "The specified element is ready to use" & Date & Time
Else
Reporter.ReportEvent 3 , "Object Disabled." , "Object remains disabled after specified time : " & refDisableTime & Date & Time
End If
Else
Reporter.ReportEvent 3 , "Element not present." , "The specified element not present : " & Date & Time
End If
End Function
Function CheckExist ( intDelay , object )
object.RefreshObject
' -- validating the object is exist or not.
If object.Exist ( intDelay ) Then
CheckExist = True
Else
CheckExist = False
End If
End Function
Function ValidateDisabled ( object , intDisableTime )
For Iterator = 1 To intDisableTime Step 1
' -- validating the object is disabled or not.
If object.GetROProperty ( "disabled" ) = 1 Then
wait 1
ValidateDisabled = False
Else
ValidateDisabled = True
Exit For
End If
Iterator = Iterator + 1
Next
End Function
答案 8 :(得分:0)
将同步添加到预期的下一个页面对象。
例如,如果下一个浏览器和页面是&#34; Page 1&#34;,那么行将是:
Browser("Page 1").Page("Page 1").sync
或者如果你不确定哪个页面会被使用
Browser("title:=.*").Page("title:=.*").sync
上面的行应检查下一个浏览器和页面(假设当时只打开一个浏览器)。
如果你想深入并检查下一个元素Html属性你可以使用任何对象的.Object方法并检查它的HTML属性,如css等。
答案 9 :(得分:0)
'Set here the timeout so that the code doesn't stuck here (infinite loop)
var_timeout = 60
x=0
do
x=x+1
loop until Browser("Browser").Page("Page").WinElement("Message").Exist(1) or x>var_timeout
在单击某个按钮后识别出应用程序中更改的对象后,如单击“保存”后,应用程序将返回一条消息,您可以使用Exist(1)语句放置该对象。
对象的参数“1”表示应该检查元素的时间,低于该值的时间总是不起作用(我从经验中说这个)并且不希望更高。
这是我经常使用的片段,我的效果很好,我认为它会满足您的需求。
如果对象没有Exist方法,请尝试.Object.isDisabled或.Object。 (查看此处显示的自动完成内容)例如浏览器(“浏览器”)。页面(“页面”).WinElement(“消息”)。Object.isDisabled其中“Object”是尝试使用本机对象方法的方法。
请注意,UFT用于自动功能测试,需要一些时间来检查对象(几毫秒)。 因此,对象出现并且QTP需要几毫秒或更长时间才能看到它存在或者对象的属性改变了值。
答案 10 :(得分:0)
您可以使用以下4个属性:
SELECT
[Project1].[Id] AS [Id],
[Project1].[Val] AS [Val],
[Project1].[Name] AS [Name],
1 + [Project1].[C1] AS [C1]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Val] AS [Val],
[Extent1].[Name] AS [Name],
(SELECT
COUNT(1) AS [A1]
FROM [dbo].[Testes] AS [Extent2]
WHERE ([Extent2].[Val] < [Extent1].[Val]) OR (([Extent2].[Val] = [Extent1].[Val]) AND ([Extent2].[Id] < [Extent1].[Id]))) AS [C1]
FROM [dbo].[Testes] AS [Extent1]
WHERE N'whatever' = [Extent1].[Name]
) AS [Project1]
wait 0,500
或browser.page.sync()
browser.page.sync(30)
browser.page.WaitProperty "text", "Simple Interest",25000
答案 11 :(得分:0)
这是一种常见的行为,应用程序将花费一些时间导航到非固定时间的其他页面。如果您使用Wait(50)..这将等待50秒,因为这是硬编码的等待... 如果您的脚本花费的时间少于50秒(假设20秒),则脚本会迫使UFT等待30秒以上,这会增加执行时间。 我根据应用程序行为在下面使用了
步骤:
代码如下:
1)browser()。page。()。webbutton(“ login”)。单击
2)将下一页对象存储在存储库中以进行验证
浏览器(“浏览器名称”)。页面(“ PageName”)。Webelement(“ Webelement name”)。waitproperty(“ Webbutton”,“ HomePage”,30000)
这将给出布尔值返回值。