【发布时间】:2013-11-14 09:34:08
【问题描述】:
在 RFT 中执行我的脚本时,由于按钮的轻微位置变化,我的脚本失败了。 (由于标签出现在按钮附近,此按钮的位置会根据为上一个组合框选择的选项而略有变化) 由于该按钮在窗口中有 2 个位置,因此我的一个脚本失败,而其他通过。 请建议如何在 RFT 的 2 个不同位置识别同一个对象?
【问题讨论】:
标签: rft ibm-rational
在 RFT 中执行我的脚本时,由于按钮的轻微位置变化,我的脚本失败了。 (由于标签出现在按钮附近,此按钮的位置会根据为上一个组合框选择的选项而略有变化) 由于该按钮在窗口中有 2 个位置,因此我的一个脚本失败,而其他通过。 请建议如何在 RFT 的 2 个不同位置识别同一个对象?
【问题讨论】:
标签: rft ibm-rational
如果您可以不使用预先映射的值,而是直接在代码中处理对象(我个人认为这非常有用......它让我可以用 RFT 做伟大而奇妙的事情 :) ,以下应该可以正常工作:
private void clickObject(String uniqueIdentifier) {
// Find object
RootTestObject root = RootTestObject.getRootTestObject();
TestObject[] matchingObjs = root.find(atProperty(".id", uniqueIdentifier));
if (matchingObjs.length > 0) {
// Click the object
((GuiTestObject) matchingObjs[0]).click();
}
// Clean-up
unregister(matchingObjs);
}
请随意将“.id”替换为最适合该情况的任何属性...由于我主要使用 Web 应用程序,因此“.id”属性对我来说非常有用。
因为该方法每次都重新找到对象,所以它会在调用该方法时获取对象的位置。清理还将防止出现任何奇怪、可怕和其他不幸的 UnregisteredObjectExceptions。
【讨论】:
如果不查看您的页面,我无法确定,但我认为这些按钮实际上是两个不同的按钮。也许它们是由 javascript 生成的,或者它们只是在您在组合框中选择的选项后未隐藏。
如果它们是两个不同的按钮(同时记录它们并查看识别属性),您可以replace some properties with a regular expression 或检查哪个按钮可见/存在,然后单击它:
if (btn_button1.exists()) {
btn_button1.click();
} else if (btn_button2.exists()) {
btn_button1.click();
}
【讨论】:
您可以在属性选项卡中增加 Rational Performance Tester AssureScript 的容差,或者您可以设置描述但隐藏值。您还可以编写自定义代码来更新对象映射,以便为 java IF 结构中的这种更改做好准备
【讨论】: