51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4009|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-12-23 19:48:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
近日,在用java编写基于selenium的web自动化测试用例时,遇到下述情况。

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

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2012-12-27 09:25:10 | 只看该作者
很好的思路。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-20 00:54 , Processed in 0.072757 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表