ii_hw 发表于 2012-12-23 19:48:01

使用Java装饰者模式设计多Tab对话框的基于Selenium的Web自动化测试

近日,在用java编写基于selenium的web自动化测试用例时,遇到下述情况。

如上图,是一个由多个tab构成的对话框,每个tab下有对应的属性内容。用户填写相关的内容后点击启动,就可以生成具有一定属性的虚拟机。现在,需要将这个操作提取成为一个公共的类,以供不同的测试场景使用,用来构成不同属性组合的虚拟机的测试用例。
至于需要什么属性的虚拟机,汀决于不同测试场景的不同需求。有的场景可能只需要一个名称属性的虚拟机;有的可能需要两到三个属性的虚拟机;有的可能需铱属性的虚拟机等等。不确定的多种组合,让编写这个公共类有了一定难度。
在考察了多种Java设计模式后,感觉“装饰者模式”较为适合目前这种情况。于是,参考该模式,设计了如下程序架构。

其中类的职责如下:
抽象构件角色(CreateVM):给出一个接口,以规范准备接收附加责任的对象。
具体构件角色(DoprepareWork):这个类用来做启动到这个多tab对话框的操作。
装饰角色(LaunchVM):持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口。
具体装饰角色(TabDetail、TabVisitAndSec、TabVolume等):就是每个具体的tab。

实现代码如下:/**
* Created with IntelliJ IDEA.
* User: whu
* Date: 12-12-12
* Time: 上午10:24
*/
public interface CreateVM {
        public void Operation();
}
public class DoPrepareWork implements CreateVM {
    //编码
        @Override
        public void Operation() {
                /*
       * 启动到该对话框的步骤
*/
}/**
* Created with IntelliJ IDEA.
* User: whu
* Date: 12-12-12
* Time: 下午5:08
*/
public class LaunchVM implements CreateVM {
    //编码
        @Override
        public void Operation() {
                composeTab();
        }
        public void composeTab() {
                createVM.Operation();
                doSelfCompose();
        }
        public void doSelfCompose() {
        }
}/**
* Created with IntelliJ IDEA.
* User: whu
* Date: 12-12-12
* Time: 下午12:37
*/
public class TabDetails extends LaunchVM {
//编码
/*
覆写父类方法
*/
        public void doSelfCompose() {
      selenium.click(TAB_NAME); //点击“详细信息”标签
                selenium.type(SERVER_NAME_ID, this.SERVER_NAME);//输入传入的服务器名称,可由构造方法初始化
                …… //其它操作
        }
}使用方法:
要在具体测试用例中使用这个公共类,测试人员编写测试用例时,只需要几行代码就可以定制出他所需要的组合的情况。例如,假设某一测试场景需要用到第一(详细信息)和第三个(卷选项)Tab属性的虚拟机,其实现步骤如下:CreateVM dpw = new DoPrepareWork(参数);
CreateVM tds = new TabDetails(dpw, 其它参数);
CreateVM tvo = new TabVolumeOption(tds, 其它参数);
Tvo.Operation();由此可见,要创建一个具有第一(详细信息)和第三个(卷选项)Tab属性的虚拟机,编码人员只需四行代码即可完成。哪怕士Tab属性都需要,也不过七行代码而已。不再需要像流水账一样,使用诸如selenium.click(),selenium.type()等这样的函数,点到第一个tab、填写内容,再点到第二个Tab、填写内容。。。。。。
使用这个公共类,编码人员可以任意顺序的构造需要用到的属性的虚拟机。组合起来相当灵活。

yazi0127 发表于 2012-12-27 09:25:10

很好的思路。
页: [1]
查看完整版本: 使用Java装饰者模式设计多Tab对话框的基于Selenium的Web自动化测试