synchronization

同步点

当被测的应用程序需要一定的时间去反映一个操作的时候,QTP会在应用程序还没准备好的情况下,就去执行下一个操作,在这总情况下,QTP可能会抛出一个异常,比如,在步骤1的时候,QTP从一个列表里边选择一个值,再进行某些操作之后会导致一个按钮会激活,QTP在按钮被激活之前,去尝试着点击这个按钮,此时QTP会抛出一个“Object is disabled

的异常

同步点被用来在测试时候执行某些操作之前插入一个暂停时间或者等待时间,这些同步点帮助避免由于被测应用程序的高响应时间而引起的不必要的错误,QTP提供三种类型的同步点

第一种方法:使用Sync方法

'选择 Option1

Browser("..").Page("..").Weblist("List").Select "Option1"

'等待页面的重新加载

Browser("..").Sync

'现在点击Next按钮

Browser("..").Page("..").WebButton("Next").Click

但是有些时候Sync方法自身也会抛出一个异常,这种情况下可以使用On error resume next句法,使用如下:

'禁止所有弹出式错误

On Error Resume Next

'同步浏览器和页面对象

Browser("..").Sync

Browser("..").Page("..").Sync

'允许弹出式错误

On error go to0

第二种方法-使用Wait语句

'选择 Option1

Browser("..").Page("..").weblist("List").Select "Option1"

'等待2

Wait 2

'点击Next按钮

Browser("..").page("..").WebButton("Next").Click

第三种方法-WaitProperty 方法

'选择 Option1

Browser("..").Page("..").Weblist("List").Select "Option1"

'等待最长5秒,直到按钮被激活,取两者数值小者为准

Browser("..").Page("..").WebButton("Next").WaitProperty("Enabled",True,5000)

'点击Next按钮

Browser("..").Page("..").WebButton("Next").Click

如果在开始操作之前,对象不存在,我们还可以使用Exist方法

'选择 Option1

Browser("..").Page("..").Weblist("List").Select "Option1"

'等待最长5秒,直到出现

bButton= Br`.Exist(5)

检查按钮是否存在

If bButton Then

'点击next按钮

Browser("..").Page("..").WebButton("Next").Click

Else

'处理此错误

End if、

检查对象的存在

考虑如下登录例子

'设置用户名和密码

Browser().Page().WebEdit("uid").set "username"

Browser().Page().WebEdit("password").Set "password"

'点击登录按钮

Browser().Page().WeBbutton("login").Click

'检查登录失败的文字是否存在

If  Browser().Page().WebElement("innerText :=Login failed").Exist(5)Then

Report.ReportEvent micFail,"Login","Login failed"

Else

Report.ReportEvent micPass,"Login","Login successful"

End If

使用如上的代码,如果用户输入了通常情况下的正确的用户名和密码,用户会浪费5秒的时间去等待一个不会出现的错误信息,使用如下的代码能减少不必要的浪费(使用了两种条件,一旦其中的一条件成立就往下进行)

Browser("百度一下,你就知道").Page("百度一下,你就知道").Frame("Frame").WebEdit("username").Set "a"

Browser("百度一下,你就知道").Page("百度一下,你就知道").Frame("Frame").WebEdit("password").SetSecure "a"

Browser("百度一下,你就知道").Page("百度一下,你就知道").Frame("Frame").WebButton("登录").Click

bLoginPass=Browser("百度一下,你就知道").Page("百度一下,你就知道").WebElement("innerText:=a").Exist(0)

bLoginFail=Browser("百度一下,你就知道").Page("百度一下,你就知道").WebElement("innerText:=登录").Exist(0)

i=0

While not bLoginPass or not bLoginFail and i<=5

wait 1

  i=i+1

bLoginPass=Browser("百度一下,你就知道").Page("百度一下,你就知道").WebElement("innerText:=imcora").Exist(0)

    bLoginFail=Browser("百度一下,你就知道").Page("百度一下,你就知道").WebElement("innerText:=登录").Exist(0)

Wend

If bLoginFail Then

reporter.ReportEvent micFail, "login","login Failed"

Elseif bLoginPass then

reporter.ReportEvent micPass ,"login","login Successful"

else

reporter.ReportEvent micFail ,"login","fail to determine login status"

End If

上面的代码看起来可能有点长,但是把这个代码放在一个函数里边,并且去重复利用它,那么会减少我们在执行过程中所浪费的时间。

BrowserPage 同步点

没有文献记载Browser sync点和Page sync点的区别,尽管他们两个看起来好像所等待的不同,Page同步点等待页面的加载,在页面里没有frames的情况下才可以工作。Browser

同步点等待页面和网页内所有的frames的加载。

Events

可能有些时候,同步点也不能解决问题,这种情况的出现有可能是Events没有被触发,我们来看下下面的HTMl代码

<HTML>

<BODY>

<INPUT name=txtName type=text size=10 οnkeyup="cmdclick.disabled=false">

<INPUT name=cmdclick  type=button DISABLED value="Click me">

</BODY>

</HTML>

此网页是这样的:当用户在输入框中按下任意的键,会把Click me 按钮激活,我们把我们在输入框中按键的操作录制录制下来

'设置WebEdit的值为Test

Browser("..").Page("..").WebEdit("txtName").Set "Test"

但是当重新运行此代码的时候,发现按钮并没有被激活,如下图:

当我们在QTP中运行如上的代码的时候,我们发现,文本被设置了,但是按钮并没有被激活,这种情况的出现是因为QTP有有个事件配置,它会使QTP有选择的录制事件,看看如上的HTML源代码,我们发现onkeyup事件需要触发,才能激活button因此,我们可以用下面的QTP代码去引起此事件的发生。

'设置WebEdit的值为Test

Browser("..").Page("..").WebEdit("..").Set "test"

'触发onkeyup事件

Browser("..").Page("..").WebEdit("..").Set "test".FireEvent "onkeyup"

如果我们不知道编辑框中定义的是哪种事件,我们可以触发所有的事件

'触发所有的事件

Browser("Browser").Page("Page").WebEdit("txtName").FireEvent "onkeydown"

Browser("Browser").Page("Page").WebEdit("txtName").FireEvent "onkeyup"

Browser("Browser").Page("Page").WebEdit("txtName").FireEvent "onkeypress"

当我们使用描述性编程的时候,我们经常需要自己添加触发事件,有三种可能的配置(LowMedium&High.要改变此配置,选择Tools-Web Event Recording Configuration…,点击 Custom Settings...按钮,选择我们需要修改的测试对象,如图:15-2

注意在最高配置下,只支持onkeydown,但是,我们的例子中的onkeyup的事件必须触发,但是QTP不支持录制此事件,QTP支持如下的,其他的必须靠手动触发:

onchange,onblur,onfocus,onmousedown,onmouseup,onmouseover,onmouseout,onsubmit,onreset 和 onpropertychange

Replay选项

QTP默认的设置是不支持web对象使用浏览器事件,那也是我们为什么在上面的代码中显式的使用FireEvent,但是我们也可以配置QTP,使它回放事件的时候使用鼠标。要修改回放类型,请选择Tools-Options…-Web(tab)-Advanced…(button)并且选择Replay TypeMouse单选按钮,如下:

或者我可以在运行时使用如下的语句去改变设置:

Setting.WebPackage("ReplayType")=2

Browser("..").Page("..").WebEdit("..").Set "Test"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
态度同步(Attitude synchronization)是指在多个部件或系统之间实现姿态(即角度、方位等)的一致性。在航天航空、机器人技术、自动驾驶等领域中,多个部件或系统需要共同维持相同的姿态以实现各种功能或协同工作。 态度同步首先涉及传感器的使用和数据融合。通过使用惯性测量单元(IMU)、陀螺仪、加速度计等传感器获取姿态信息,可以在各个部件或系统中实时更新姿态数据。通过数据融合算法可以将不同传感器获取的数据进行整合,消除噪声和误差,提高姿态数据的准确性和稳定性。 其次,态度同步还需要采取控制策略来实现姿态的一致性。通过设计合适的控制算法,可以根据姿态数据的变化情况,及时调整各个部件或系统的工作状态,使它们保持相同的姿态。这样可以实现多个部件或系统之间的协调工作,提高工作效率和精度。 最后,态度同步还需要良好的通信和协同机制。多个部件或系统之间需要及时共享姿态数据和控制指令,以便实现同步操作。通过建立有效的通信网络和制定统一的协议,可以实现姿态信息的传输和共享,保证各个部件或系统之间的正确协同。 综上所述,态度同步是实现多个部件或系统之间姿态一致性的关键技术,它涉及传感器的使用和数据融合、控制策略的设计以及通信和协同机制的建立。通过实现态度同步,可以提高系统的整体性能和精度,实现更高效、精准的工作或任务完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值