(二)使用getProperty 和 invoke 方法测试定制的Java 控件

发表于:2007-8-06 15:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Tim Snow    来源:网络转载

将所有组件放入小窗口类

        现在您已经创建了操纵定制控件的代码,您需要将它放入脚本编辑器。很明显,您不希望在每个脚本中为了点击按钮全部重复创建复杂的代码。您更希望这段代码可以被任何脚本都可以使用的核心类的方法所调用。尤其是,您需要为这些控件创建小窗口类(widget classes)(请浏览在 参考资料中名为“Wrapping calls to the Rational Functional Tester API”的 developerWorks 文章)。您可以通过这种方式对用户隐藏细节部分,从而减少自动化过程中的错误。

        您现在可以把 Action Bar 中点击按钮的方法移到 Action Bar 小窗口中了:

        列表 12: 将方法移至小窗口(widget)类

public class ActionBarapplet {

private GuiTestObject actionBar=null;

public ActionBarapplet(GuiTestObject gto) {
actionBar = gto;
}

public void clickButton(int iButtonIndex) {
int x = 0, y = 0, width = 0, height = 0;

// **** CALCULATE x coordinate ****
for (int i = 0; i < iButtonIndex; i++) {
x += ((Integer)actionBar.getChildren()[0].getChildren
()[0].invoke("calculateButtonWidth", "(I)I", new
Object[] {new Integer(i)})).intValue();
}

// **** CALCULATE width ****
width = ((Integer)actionBar.getChildren()[0].getChildren
()[0].invoke("calculateButtonWidth", "(I)I",
new Object[] {new Integer(iButtonIndex)})).intValue();

// **** CALCULATE y coordinate ****
y = 0;

// **** CALCULATE height ****
height = (int)actionBar.getScreenRectangle().getHeight();

Point pointToClick=new Point(x + width/2, y + height/2);
actionBar.click(pointToClick);
}
 

        在这个类中,您的用户可以使用返回来自于对象图的 GuiTestObject 构建一个 Action Bar applet,然后可以使用 clickButton 方法很容易的通知 Rational Functional Tester 点击按钮。当然,您会想给这个类增加更多的方法,包括 getNumberOfButtons 和 getButtonName。在加入这些方法后,您还可以为用户增加出错校验和其他方便的工具(例如,重载 clickButton,使得用户可以以字符串方式输入按钮名称而不用依靠索引)。

        以下是 Editor applet 类的开头,它包括了您之前创建的代码:

        列表 13: Editor applet 类的开头代码

public class Editorapplet {

private GuiTestObject editor;

public Editorapplet(GuiTestObject to) {
editor=to;
}

public void typeKeys (String s) {
getCRTEditor().click();
RationalTestScript.getScreen().inputKeys(s);
}
public boolean isBold() {
return ((Boolean)getBoldButton().invoke
("getSelected")).booleanValue();
}

public void setBold() {
if (!isBold())
this.getBoldButton().click();
}
public void unsetBold() {
if (isBold())
this.getBoldButton().click();
}

public java.awt.Color getColor() {
return (java.awt.Color)getColorSelector().invoke("getColor");
}

public void setColor(java.awt.Color color) {
getColorSelector().invoke("setColor",
"(Ljava.awt.Color;)V", new Object[] {color});
}

public GuiTestObject getCRTEditor() {
return (GuiTestObject)editor.find(SubitemFactory.atDescendant
(".class","lotus.notes.apps.editor.CRTEdit"))[0];
}

public GuiTestObject getBoldButton() {
//Bold is first button:
//0.2.0.0 = lotus.notes.apps.editorpanel.MultiImgButton
return (GuiTestObject)editor.getChildren()[0].getChildren()
[2].getChildren()[0].getChildren()[0];
}

public TestObject getColorSelector() {
return (GuiTestObject)editor.find(SubitemFactory.atDescendant
("class","ColorCanvas"))[0];
}
}

 

注意: 
        事实上您没有在本类中映射任何东西。相反的,用户传入一个 GuiTestObject 类以响应 applet 最顶部的 Java 类,而您可以动态的搜索所有的组件。 这使得 Editor applet 更通用化。

        脚本可按照如下代码使用小窗口类:

        列表 14: 脚本所使用的小窗口代码

TestObject to = Editorapplet(); //get the TestObject from the Object Map
Editorapplet editor = new Editorapplet(to); //construct the widget

editor.setBold();
editor.setColor(java.awt.Color.RED);

editor.typeKeys("testing");
System.out.println(editor.isBold());
 

        正如您所看到的,它极大的简化了使用这些定制控件的方法。当然,正像我已提到过的,小窗口中存在很多种方法都是用户所需的。使用 invoke 和 getProperty 方法,您可以为他们提供其所需信息。

使用这些方法的最佳实践

        定制控件使人感到害怕,但是 Rational Functional Tester 为您提供了有力的工具。getProperty 和 invoke 方法一般情况下足以满足处理 Java 定制控件所遇到的问题。您可以使用 getProperty 获取大部分您所需的信息,但是如果您所需的信息不是一种属性或者需要调用的方法需要一个参数,您可以使用 invoke 方法作为替代。

        getProperty 和 invoke 很相似,因为它们都允许您调用控件自身的方法,而不是使用由 Rational 软件提供的中间件接口。这使您可以更好的测试定制控件。但请不要错误的使用。 最好的方法就是使用这些方法获取关于控件的信息,依据这些信息决定如何告诉 Rational Functional Tester 按照用户需要操纵控件。换句话说,就是要避免使用 Java 控件或用户不能实现的操纵控件的方法集。如果您遵守这个规则,那么您的测试将会获得更好更全面的效果。

        当自动化测试大型Java应用程序时,您一定会遇到定制控件。使用 Rational Functional Tester 的 getProperty 和 invoke 方法,能够相对直接的创建您自己的调用以操纵这些控件。在您把这些调用封装入一个小窗口后,脚本编辑器可以像测试标准Java控件一样使用这些控件编写自动化脚本。

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号