UDN-企业互联网技术人气社区

板块导航

浏览  : 2899
回复  : 11

[Eclipse] SWTBot 相关图书资源贴!

[复制链接]
土鳖的头像 楼主
发表于 2015-10-10 14:46:07 | 显示全部楼层 |阅读模式
SWTBot 相关图书资源贴!

此贴将不断追加SWTBot的资料。

Eclipse 4 Plug-in Development by Example.pdf

7.71 MB, 下载次数: 15

发表于 2015-10-23 13:55:06 | 显示全部楼层
主子列表单据模式化案例自动化代码(版本1)/SwtBot :

import org.eclipse.swtbot.eclipse.finder.SWTBotEclipseTestCase;
import org.junit.Test;

public class RecordedTestCase extends SWTBotEclipseTestCase {

        @Test
        public void NewLfw(){
                bot.menu("文件(F)").menu("新建(N)").menu("项目(R)...").click();
                bot.text().setText("lfw");
                bot.tree().getTreeItem("WEB开发").getNode("LFW工程").select();
                bot.button("下一步(N)>").click();
                bot.textWithLabel("&工程名:").setText("LfwDemo");
                bot.textWithLabel("模块名").setText("LfwDemo");
                bot.button("完成(F)").click();
                bot.button("是(Y)").click();
                bot.viewByTitle("UAP-STUDIO error report (工作空间日志)").show();
                bot.viewByTitle("包资源管理器").show();
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").select();
        }
//新建工作空间会导致服务器启动,需要时间加载,手动写入
bot.sleep(12000);

        @Test
        public void AddMiddleWare(){
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").expand();
                bot.contextMenu("添加业务组件").click();
                bot.textWithLabel("业务组件名").setText("demo");
                bot.textWithLabel("业务组件显示名称").setText("demo");
                bot.button("完成(F)").click();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").expand();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").expand();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("UI").expand();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("UI").getNode("应用").select();
                bot.contextMenu("新建应用").click();
                bot.textWithLabel("包前缀,如 com.xxx").setText("com.ddl");
                bot.button("确定").click();
                bot.textWithLabel("Id:").setText("demo_one");
                bot.textWithLabel("名称:").setText("demo_one");
                bot.textWithLabel("Controller类:").setText("com.ddl.demo.one.OneAppController");
                bot.button("确定").click();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("UI").getNode("应用").getNode("demo_one[demo_one]").select();
        }

        @Test
        public void AddAplication(){
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("UI").getNode("应用").getNode("demo_one[demo_one]").select();
                bot.contextMenu("模式化向导").click();
                bot.list().select("主子列表单据模板");
                bot.button("下一步(N)>").click();
                bot.textWithLabel("查找指定组件:").setText("id");
                bot.tree().getTreeItem("IDContrast[IDContrast]").select();
                bot.button("下一步(N)>").click();
                bot.button("下一步(N)>").click();
                bot.button("确定").click();
                bot.button("下一步(N)>").click();
                bot.button("完成(F)").click();
                bot.button("确定").click();
               
        }
//这俩个测试函数间是人为手动分开,因为模式化的时候,鼠标的焦点被锁定在窗口内,无法切换窗口句柄,不知道分开是否能继续测试,因为SWTBOT脚本语言是面向过程,猜测//应该可以人为拆分,只要执行命令是相接即可。
            @Test
        public void FunctionAndMenuAndPortal(){
        bot.button("新建菜单分类").click();
                bot.textWithLabel("菜单分类编码").setText("LfwDemoone1");
                bot.textWithLabel("菜单分类名称").setText("LfwDemoone1");
                bot.button("确定").click();
                bot.comboBox().setText("");
                bot.button("选择父菜单").click();
                bot.tree().getTreeItem("LfwDemoone1").select();
                bot.button("新建菜单").click();
                bot.textWithLabel("菜单编码").setText("LfwDemoone2");
                bot.textWithLabel("菜单名称").setText("LfwDemoone2");
                bot.button("确定").click();
                bot.tree().getTreeItem("LfwDemoone1").getNode("LfwDemoone2").select();
                bot.button("确定").click();
                bot.textWithLabel("菜单编码").setText("LfwDemoone3");
                bot.textWithLabel("菜单名称").setText("LfwDemoone3");
                bot.button("新建模块").click();
                bot.textWithLabel("产品模块ID").setText("LfwDemoone4");
                bot.textWithLabel("模块标题").setText("LfwDemoone4");
                bot.button("确定").click();
                bot.button("新建功能分类").click();
                bot.textWithLabel("功能分类编码").setText("LfwDemoone5");
                bot.textWithLabel("功能分类名称").setText("LfwDemoone5");
                bot.button("确定").click();
                bot.textWithLabel("功能编码").setText("LfwDemoone6");
                bot.textWithLabel("功能名称").setText("LfwDemoone6");
                bot.button("确定").click();
                bot.button("确定").click();
                bot.button("确定").click();
                bot.textWithLabel("查找指定数据集:").setText("id");
                bot.tree().getTreeItem("ID对照表").select();
                bot.button("确定").click();
                bot.button("确定").click();
                bot.button("确定").click();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("模板").expand();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("模板").getNode("查询模板").expand();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("Portal配置").expand();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("Portal配置").getNode("Portal页面").select();
                bot.contextMenu("按菜单分类生成页面").click();
                bot.comboBox().setSelection("LfwDemoone1");
                bot.button("确定").click();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("Portal配置").getNode("Portal页面").select();
                bot.tree().getTreeItem("LfwDemo [LfwDemo]").getNode("demo[demo]").getNode("Portal配置").getNode("Portal页面").getNode("LfwDemoone1").select();


}

}
点评 ( 1 ) 收起 / 展开点评

土鳖 2015年11月10日 19:21 详情 回复

这个脚本录制的内容是UAPStudio6.5.0.2在WEB应用开发活动中主子列表模式化生成的过程.

评分

参与人数 1U币 +80 收起 理由
benbenxiong + 80 少年,你这么屌,你家里造吗!

查看全部评分

使用道具 举报

回复

发表于 2015-10-23 13:55:50 | 显示全部楼层
主子列表流程模板案例自动化代码(版本1)/SwtBot :
import org.eclipse.swtbot.eclipse.finder.SWTBotEclipseTestCase;
import org.junit.Test;

public class RecordedTestCase extends SWTBotEclipseTestCase {

        @Test
        public void NewLFWProject(){
                bot.viewByTitle("项目资源管理器").show();
                bot.menu("文件(F)").menu("新建(N)").menu("其他(O)...").click();
                bot.text().setText("lfw");
                bot.tree().getTreeItem("WEB开发").getNode("LFW工程").select();
                bot.button("下一步(N)>").click();
                bot.textWithLabel("&工程名:").setText("Lfw");
                bot.textWithLabel("模块名").setText("lfw");
                bot.button("完成(F)").click();
                bot.button("是(Y)").click();
                bot.viewByTitle("包资源管理器").show();
                bot.viewByTitle("包资源管理器").show();
                bot.viewByTitle("LFW项目浏览器").show();
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("Lfw [lfw]").select();
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("Lfw [lfw]").expand();
                bot.button("在后台运行(B)").click();
                bot.contextMenu("添加业务组件").click();
                bot.textWithLabel("业务组件名").setText("ddd");
                bot.textWithLabel("业务组件显示名称").setText("d");
                bot.textWithLabel("业务组件名").setText("TestSecond");
                bot.textWithLabel("业务组件显示名称").setText("TestSecond");
                bot.button("完成(F)").click();
                bot.tree().getTreeItem("Lfw [lfw]").expand();
        }

        @Test
        public void AddMiddleSoftWare(){
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("Lfw [lfw]").expand();
                bot.viewByTitle("LFW项目浏览器").show();
                bot.contextMenu("设置工程模块前缀").click();
                bot.textWithLabel("包前缀,如 com.xxx").setText("com.ddl");
                bot.button("确定").click();
        }

        @Test
        public void NewAPP(){
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("UI").getNode("应用").select();
                bot.contextMenu("新建应用").click();
                bot.textWithLabel("Id:").setText("TestSecond_one");
                bot.textWithLabel("名称:").setText("TestSecond_one");
                bot.textWithLabel("Controller类:").setText("com.ddl.TestSecond.one.OneAppController");
                bot.button("确定").click();
        }

        @Test
        public void AddProcessLine(){
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("流程").expand();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("流程").select();
                bot.contextMenu("新建流程大类").click();
                bot.textWithLabel("类型编码:").setText("ff");
                bot.textWithLabel("类型名称:").setText("ff");
                bot.button("确定").click();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("流程").expand();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("流程").getNode("ff").select();
                bot.contextMenu("新建流程类型").click();
                bot.textWithLabel("类型编码:").setText("dd");
                bot.textWithLabel("类型名称:").setText("dd");
                bot.button("确定").click();
        }

        @Test
        public void AppProcessInstance(){
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("UI").expand();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("UI").getNode("应用").expand();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("UI").getNode("应用").getNode("TestSecond_one[TestSecond_one]").select();
                bot.contextMenu("模式化向导").click();
                bot.list().select("主子列表流程模板");
                bot.button("下一步(N)>").click();
                bot.textWithLabel("查找指定组件:").setText("币种");
                bot.tree().getTreeItem("币种[currtype]").select();
                bot.button("下一步(N)>").click();
                bot.comboBox().setSelection("ff");
                bot.button("下一步(N)>").click();
                bot.button("下一步(N)>").click();
                bot.button("确定").click();
                bot.button("下一步(N)>").click();
                bot.button("完成(F)").click();
                bot.button("确定").click();
                bot.button("新建菜单分类").click();
                bot.textWithLabel("菜单分类编码").setText("DLSecond01");
                bot.textWithLabel("菜单分类名称").setText("DLSecond01");
                bot.button("确定").click();
                bot.comboBox().setText("");
                bot.button("选择父菜单").click();
                bot.tree().getTreeItem("DLSecond01").select();
                bot.button("新建菜单").click();
                bot.textWithLabel("菜单编码").setText("DLSecond02");
                bot.textWithLabel("菜单名称").setText("DLSecond02");
                bot.button("确定").click();
                bot.tree().getTreeItem("DLSecond01").getNode("DLSecond02").select();
                bot.button("确定").click();
                bot.textWithLabel("菜单编码").setText("DLSecond03");
                bot.textWithLabel("菜单名称").setText("DLSecond03");
                bot.button("新建模块").click();
                bot.textWithLabel("产品模块ID").setText("DLSecond04");
                bot.textWithLabel("模块标题").setText("DLSecond04");
                bot.button("确定").click();
                bot.button("新建功能分类").click();
                bot.textWithLabel("功能分类编码").setText("DLSecond05");
                bot.textWithLabel("功能分类名称").setText("DLSecond05");
                bot.button("确定").click();
                bot.textWithLabel("功能编码").setText("DLSecond06");
                bot.textWithLabel("功能名称").setText("DLSecond06");
                bot.button("确定").click();
                bot.button("确定").click();
                bot.button("确定").click();
                bot.textWithLabel("查找指定数据集:").setText("币种");
                bot.tree().getTreeItem("币种").select();
                bot.button("确定").click();
                bot.button("确定").click();
                bot.button("确定").click();
        }

        @Test
        public void PageGeneration(){
                bot.viewByTitle("LFW项目浏览器").show();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("Portal配置").expand();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("Portal配置").getNode("Portal页面").select();
                bot.contextMenu("按菜单分类生成页面").click();
                bot.comboBox().setSelection("DLSecond01");
                bot.button("确定").click();
                bot.tree().getTreeItem("Lfw [lfw]").getNode("TestSecond[TestSecond]").getNode("Portal配置").getNode("Portal页面").select();
        }

}
点评 ( 1 ) 收起 / 展开点评

土鳖 2015年11月10日 19:19 详情 回复

此脚本录制的内容是UAPStudio6.5.0.2 开发WEB应用中的主子列表流程模板模式化生成的过程. 理论上讲录制后可以回放此脚本实现自动化回归测试.

评分

参与人数 1U币 +80 收起 理由
benbenxiong + 80 赞!我和我的小伙伴都惊呆了!.

查看全部评分

使用道具 举报

回复

土鳖的头像 楼主
发表于 2015-10-28 11:31:44 | 显示全部楼层
这个是比较稳定的SWTBot 2.3.0版本带源代码的插件包

repository.zip

3.91 MB, 下载次数: 4

使用道具 举报

回复

土鳖的头像 楼主
发表于 2015-11-10 19:19:29 | 显示全部楼层
丁丁亮 发表于 2015-10-23 13:55
主子列表流程模板案例自动化代码(版本1)/SwtBot :
import org.eclipse.swtbot.eclipse.finder.SWTBotEcl ...

此脚本录制的内容是UAPStudio6.5.0.2 开发WEB应用中的主子列表流程模板模式化生成的过程.
理论上讲录制后可以回放此脚本实现自动化回归测试.
使用道具 举报

回复

土鳖的头像 楼主
发表于 2015-11-10 19:21:33 | 显示全部楼层
丁丁亮 发表于 2015-10-23 13:55
主子列表单据模式化案例自动化代码(版本1)/SwtBot :

import org.eclipse.swtbot.eclipse.finder.SWTBot ...

这个脚本录制的内容是UAPStudio6.5.0.2在WEB应用开发活动中主子列表模式化生成的过程.
使用道具 举报

回复

土鳖的头像 楼主
发表于 2015-11-10 19:36:22 | 显示全部楼层
本帖最后由 土鳖 于 2015-11-16 09:41 编辑

1,SWTBot脚本的录制和回放是基于对SWT控件的识别(基于控件属性)和操作(基于控件的方法).
2,SWTBot脚本的每行都是用Java语言描述的针对一个特定的SWT控件的动作.Eclipse界面控件大部分都是SWT控件.
3,Java赋予SWTBot脚本天然的逻辑处理能力,使得SWTBot脚本的可以具有一定逻辑处理能力.(曾经被某专家提示:逻辑不能解决所有问题!个人深以为然,所以,从来没有吹嘘以逻辑为基础的软件工程可以解决所有软件研发过程中的所有问题,尤其是技术以外的问题.因此,对某专家心存感激!)
4,开发人员的开发活动是智力活动,是创造性活动.不过,开发人员的开发活动是有规律可循的,开发是有设计流程的,代码设计是有设计模式可以遵循的,代码设计策略就那么几种,复杂的是根据客观情况进行组合设计.
5,源代码本身是可以组合,复用,可参数化的和可配置的.

基于上述事实,你觉得SWTBot除了实现Eclipse控件的自动化测试还能做些什么呢?


嘿嘿!


哈哈!


呵呵......
点评 ( 1 ) 收起 / 展开点评

土鳖 2015年11月10日 19:46 详情 回复

异想天开,你以为你是谁? 还是脚踏实地干点实事吧! 1,先解决脚本回放问题? ---------过不了这关,就别提Eclipse自动化测试!记住:稳定性和回放效率都是首要目标. 2,再解决回放过程通过命令行调用研究得怎么样啦? ------

使用道具 举报

回复

土鳖的头像 楼主
发表于 2015-11-10 19:46:15 | 显示全部楼层
土鳖 发表于 2015-11-10 19:36
1,SWTBot脚本的录制和回放是基于对SWT控件的识别(基于控件属性)和操作(基于控件的方法).
2,SWTBot脚本的每 ...

异想天开,你以为你是谁?
还是脚踏实地干点实事吧!
1,先解决脚本回放问题?
---------过不了这关,就别提Eclipse自动化测试!记住:稳定性和回放效率都是首要目标.
2,再解决回放过程通过命令行调用研究得怎么样啦?
---------过不了这关,就别提自动化构建,部署和自动启动自动化测试!
使用道具 举报

回复

发表于 2015-11-16 10:22:35 | 显示全部楼层
此脚本录制的内容是UAPStudio6.5.0.2 开发WEB应用中的主子列表流程模板模式化生成的过程. 理论上讲录制后可以回放此脚本实现自动化回归测试.
点评 ( 1 ) 收起 / 展开点评

土鳖 2015年11月16日 10:51 详情 回复

录制-回放是最初级的自动化测试框架,完成录制回放过程,仅仅证明这个框架可以干活了. 1,录制回放的目标是证明SWTBot对我们自定义的SWT控件识别的准确性和稳定性 2,考虑i18n问题,需要修改上述脚本中识别控件的方式,

使用道具 举报

回复

土鳖的头像 楼主
发表于 2015-11-16 10:51:57 | 显示全部楼层
柠檬草的味道 发表于 2015-11-16 10:22
此脚本录制的内容是UAPStudio6.5.0.2 开发WEB应用中的主子列表流程模板模式化生成的过程. 理论上讲录制后可 ...

录制-回放是最初级的自动化测试框架,完成录制回放过程,仅仅证明这个框架可以干活了.

1,录制回放的目标是证明SWTBot对我们自定义的SWT控件识别的准确性和稳定性

2,考虑i18n问题,需要修改上述脚本中识别控件的方式,希望可以做到一次录制,在多种语言环境下回放.

3,需要解决回放脚本的速度与系统反映速度自适应的基本问题.以便提高回放成功率和稳定性.

解决这些基本问题虽然技术难度不大,但是都是耗时费力的工作需要资源投入啊.
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部