1

映射的 TestObjects 通常通过 getter 方法访问,例如

button().click();
// Other code
button().click();
// ...
button().click();

有什么理由我不应该检索一次 TestObject 并重用它?例如

GuiTestObject button = button();
button.click();
button.click();
button.click();

或者,换一种说法,RFT 生成 getter 方法而不是成员变量有什么原因?

我能想到的唯一潜在原因是避免占用被测应用程序的内存,但这对我来说没有任何意义;Java 终结器不可靠,所以我怀疑当 TestObject 被垃圾收集时,RFT 是否会释放任何资源。另外,即使我关闭并重新打开应用程序,我也可以继续使用相同的映射 TestObject,这表明 RFT 每次尝试使用它时都会重新查找(并随后取消注册)测试对象。

如果没有缺点,为什么我发现的每个引用都只能通过 getter 方法访问 TestObjects?例如,IBM RFT 的面向对象框架,清单 2 和 3。

4

1 回答 1

2

我想,首先是因为

button().click();  

对用户来说,代码比 .. 更干净/更简单

GuiTestObject button = new GuiTestObject( getMappedTestObject("thebutton"));//This currently resides in the helper file.
 button.click();

其次,button() 方法可以传递一个“Anchor”和一个“Flag”,这也是在 Helper class.so 中再次实现的

    button(anchorobject,flags).click();

比拥有一个按钮对象更简单

    GuiTestObject button1 = new GuiTestObject(getMappedTestObject("thebutton"),anchor,flags);
    button1.click(); 

如果你的意思是有类似的东西..

GuiTestObject button = button();//where button() still is in helper class
button.click();
button.dosomthingelse();

然后我们需要为按钮指定对象的实际类型,然后我们为文本控件、选择和树等提供不同的 TestObject 类型。使用这种现有方法,用户可以完全不知道存在不同类型的 TestObjects (GuiTestObject / TextGuiTestObject/SelectGuiSubitemTestObject) 等,由对象的 getter 方法返回。

我们在脚本中处理的是驻留在播放过程中的 TestObject。TestObject 只是在应用程序中查找实际对象并为其创建代理(驻留在应用程序进程中)的规范,并且该代理是在特定操作完成后释放的(例如 click() )。但是,TestObject 仍然有效,并且正如您所说的那样,如果您重用 testobject,RFT 将再次找到该对象。TestObject 将在需要时由垃圾收集器处理,我猜用户可以进一步优化该代码。最后回答你的问题,我不知道使用你拥有的测试对象会有什么缺点。我认为它也不会在性能方面对您有所帮助。

于 2013-07-18T19:43:10.013 回答