1

说明:

1.以下的代码亲测直接可用,

2.设计思路来自博客园的 张飞_ :http://www.cnblogs.com/zhangfei/p/5330994.html   /   http://www.cnblogs.com/zhangfei/p/

3.重点在于理解 当中的设计思路 ,如果问题需要讨论可以联系我QQ:316567803 或者给我留言; 

7.person 和 MoveDisk类

 package keyWordsDriver;

 /**
*
*/
public class Person {
void getTheCommandFromTeacher(){}
void findTheDeskAtA(){}
void moveDeskToB(){}
void notifyTeacherHadFinished(){}
} package keyWordsDriver; /**
*
*/
public class MoveDesk { private Person zhangsan; public void setZhangsan(Person zhangsan) {
this.zhangsan = zhangsan;
} public void setZhangsan() {
System.out.println("\n");
System.out.println("大家好我是张三,你现在执行的方法为:setZhangsan()");
this.zhangsan = new Person();
System.out.println("\n");
} public void moveDeskFromA2B() {
zhangsan.getTheCommandFromTeacher();
zhangsan.findTheDeskAtA();
zhangsan.moveDeskToB();
zhangsan.notifyTeacherHadFinished();
}
}

8.反射需要用的关键字对象整理:

 package keyWordsDriver;

 import java.util.HashMap;
import java.util.Map; /**
* 1.根据张三 ,得到张三的className,通过className得到张三这个对象,然后再执行张三所要执行的方法(setZhangsan)
*/
public class KeywordReflect { public static Map<String, Map<String, String>> KEYWORD_POOLS = new HashMap<String, Map<String, String>>();
static{
KEYWORD_POOLS.put("张三", KeywordReflect.methodInfo(MoveDesk.class.getName(), "setZhangsan"));
KEYWORD_POOLS.put("把桌子从A地点搬到B地点", KeywordReflect.methodInfo(MoveDesk.class.getName(), "moveDeskFromA2B"));
} public static Map<String, String> methodInfo(String className, String methodName){
Map<String, String> methodInfo = new HashMap<String, String>();
methodInfo.put("class", className);
methodInfo.put("method", methodName);
return methodInfo; } static void print() {
for (Map.Entry<String, Map<String, String>> entrys : KEYWORD_POOLS.entrySet()
) {
System.out.println("entrys.getKey()="+entrys.getKey());
Map<String,String> values = entrys.getValue();
for (Map.Entry<String, String> entyr2 : values.entrySet()
) {
System.out.println(entyr2);
}
}
} public static void main(String[] args) {
KeywordReflect.print();
} }

9.对象库负责初始化所有需要用到的对象;

 package keyWordsDriver;

 import java.util.HashMap;
import java.util.Map; /**
* 这是对象的注册中心 ;
*/
public class RegisterCenter {
public static Map<String, Object> OBJ_POOLS = new HashMap<String, Object>();
static{
OBJ_POOLS.put(MoveDesk.class.getName(), new MoveDesk());
} }

10.解析关键

 package keyWordsDriver;

 import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
*
*/
public class RegExp {
public boolean match(String reg, String str) {
return Pattern.matches(reg, str);
} public List<String> find(String reg, String str) {
Matcher matcher = Pattern.compile(reg).matcher(str);
List<String> list = new ArrayList<String>();
while (matcher.find()) {
list.add(matcher.group());
}
return list;
} } package keyWordsDriver; import java.util.List; /**
* ParseKeyword 用于解析关键字,需要指定的格式 ;
*/
public class ParseKeyword {
public List<String> getKeywords(String p) {
String reg = "(?<=(?<!\\\\)\\$\\{)(.*?)(?=(?<!\\\\)\\})";
RegExp re = new RegExp();
List<String> list = re.find(reg, p);
return list; } public static void main(String[] args) { ParseKeyword p = new ParseKeyword();
System.out.println(p.getKeywords("${张三},去${把桌子从A地点搬到B地点}"));
System.out.println(p.getKeywords("a${a}a"));
System.out.println(p.getKeywords("a\\${a}a"));
System.out.println(p.getKeywords("a${a\\}a"));
System.out.println(p.getKeywords("a${a\\}a}a"));
System.out.println(p.getKeywords("a${a}a${"));
System.out.println(p.getKeywords("a${ab}a${a}")); } }

11,方法执行的过程:

 package keyWordsDriver;

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* 利用反射进行方法的执行 ;
*/ public class Executor {
private ParseKeyword pk = new ParseKeyword(); public List<String> readTxtFile(String filePath) {
List<String> list = new ArrayList<String>();
try {
String encoding = "UTF8";
File file = new File(filePath);
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
while ((lineTxt = bufferedReader.readLine()) != null) {
list.add(lineTxt);
// System.out.println(" : "+lineTxt);
}
read.close();
bufferedReader.close();
} else {
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
return list;
} void print() {
String path = ClassLoader.getSystemClassLoader().getResource("command.txt").getPath();
List<String> lists = this.readTxtFile(path);
System.out.print("lists 总共有:"+lists.size()+"行 内容为: ");
for (String vaule : lists
) {
System.out.print(vaule);
}
} public void executor() {
String path = ClassLoader.getSystemClassLoader().getResource("command.txt").getPath();
List<String> commands = this.readTxtFile(path);
for (String command : commands) {
System.out.println("---------------------------------------------");
System.out.println("%%%%%%%%%%%%%%%%%%"+"command="+command+" %%%%%%%%%%%%%%%%%%%%%%");
List<String> keywords = pk.getKeywords(command); for (String keyword : keywords) {
this.invoke(keyword);
}
System.out.println("---------------------------------------------");
}
} public void invoke(String keyword) {
System.out.println("keyword="+keyword);
Map<String, String> keyMethod = KeywordReflect.KEYWORD_POOLS.get(keyword);
System.out.println("keyMethod="+keyMethod);
String className = keyMethod.get("class");
System.out.println("className="+className);
String methodName = keyMethod.get("method");
System.out.println("methodName="+methodName);
Object obj = RegisterCenter.OBJ_POOLS.get(className);
System.out.println("obj="+obj);
Method method = this.getMethod(methodName, obj);
System.out.println("method="+method);
try {
method.invoke(obj);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace(); } } private Method getMethod(String methodName, Object obj) {
try {
System.out.println("methodName="+methodName+"; obj="+obj.getClass().getName());
Method[] methods = obj.getClass().getMethods();
for (Method m : methods) {
if (m.getName().equals(methodName)) {
return m;
}
}
} catch (SecurityException e) {
return null;
}
return null;
} public static void main(String[] args) {
Executor e = new Executor();
e.print();
e.executor();
} }

12. 代码运行的结果:其实仔细的话从结果红你能看到你想看到的东西 ,上面有部分内容省略了 ;

 "C:\Program Files\Java\jdk1.8.0_65\bin\java" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\CustomSofter\develop\IDEA\IntelliJ IDEA Community Edition 2016.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_65\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\rt.jar;C:\CustomSofter\develop\IDEA\IdeaWorkspace_1\JaraPro\out\production\JaraPro;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\selenium-java-2.47.0.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\apache-mime4j-0.6.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\bsh-1.3.0.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\cglib-nodep-2.1_3.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\commons-codec-1.10.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\commons-collections-3.2.1.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\commons-exec-1.3.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\commons-io-2.4.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\commons-lang3-3.4.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\commons-logging-1.1.3.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\cssparser-0.9.16.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\gson-2.3.1.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\guava-18.0.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\hamcrest-core-1.3.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\hamcrest-library-1.3.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\htmlunit-2.17.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\htmlunit-core-js-2.17.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\httpclient-4.4.1.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\httpcore-4.4.1.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\httpmime-4.4.1.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\jcommander-1.29.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\jetty-io-9.2.11.v20150529.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\jetty-util-9.2.11.v20150529.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\jna-4.1.0.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\jna-platform-4.1.0.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\junit-4.12.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\nekohtml-1.9.22.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\netty-3.5.7.Final.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\phantomjsdriver-1.2.1.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\sac-1.3.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\serializer-2.7.2.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\testng-6.8.5.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\websocket-api-9.2.11.v20150529.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\websocket-client-9.2.11.v20150529.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\websocket-common-9.2.11.v20150529.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\xalan-2.7.2.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\xercesImpl-2.11.0.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\seleniumJar\selenium-2.47.0\libs\xml-apis-1.4.01.jar;C:\CustomSofter\develop\IDEA\softerwareJAR\othersJAR\jyaml\jyaml-1.3.jar;C:\CustomSofter\develop\IDEA\IntelliJ IDEA Community Edition 2016.2.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain keyWordsDriver.Executor
lists 总共有:1行 内容为: ${张三},去${把桌子从A地点搬到B地点}”,---------------------------------------------
%%%%%%%%%%%%%%%%%%command=${张三},去${把桌子从A地点搬到B地点}”, %%%%%%%%%%%%%%%%%%%%%%
keyword=张三
keyMethod={method=setZhangsan, class=keyWordsDriver.MoveDesk}
className=keyWordsDriver.MoveDesk
methodName=setZhangsan
obj=keyWordsDriver.MoveDesk@5674cd4d
methodName=setZhangsan; obj=keyWordsDriver.MoveDesk
method=public void keyWordsDriver.MoveDesk.setZhangsan() 大家好我是张三,你现在执行的方法为:setZhangsan() keyword=把桌子从A地点搬到B地点
keyMethod={method=moveDeskFromA2B, class=keyWordsDriver.MoveDesk}
className=keyWordsDriver.MoveDesk
methodName=moveDeskFromA2B
obj=keyWordsDriver.MoveDesk@5674cd4d
methodName=moveDeskFromA2B; obj=keyWordsDriver.MoveDesk
method=public void keyWordsDriver.MoveDesk.moveDeskFromA2B()
--------------------------------------------- Process finished with exit code 0

selenium 关键字驱动部分设计思路的更多相关文章

  1. Selenium关键字驱动测试框架Demo(Java版)

    Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html

  2. UI自动化测试框架之Selenium关键字驱动 (转)

    摘要 自动化测试框架demo,用关键字的形式将测试逻辑封装在数据文件中,测试工具解释这些关键字即可对其应用自动化 一.原理及特点 1.   关键字驱动测试是数据驱动测试的一种改进类型 2.    主要 ...

  3. 【转】UI自动化测试框架之Selenium关键字驱动

    原网址:https://my.oschina.net/hellotest/blog/531932#comment-list 摘要: 自动化测试框架demo,用关键字的形式将测试逻辑封装在数据文件中,测 ...

  4. UI自动化测试框架之Selenium关键字驱动

    一.原理及特点 1. 关键字驱动测试是数据驱动测试的一种改进类型 2. 主要关键字包括三类:被操作对象(Item).操作(Operation)和值(value),用面向对象形式可将其表现为Item.O ...

  5. Python&Selenium 关键字驱动测试框架之数据文件解析

    摘要:在关键字驱动测试框架中,除了PO模式以及一些常规Action的封装外,一个很重要的内容就是读写EXCEL,在团队中如何让不会写代码的人也可以进行自动化测试? 我们可以将自动化测试用例按一定的规格 ...

  6. 自动化测试架构设计 &&自动化持续集成测试任务实战[线性测试、模块驱动测试、数据驱动测试、关键字驱动测试]

    1 为什么设计自动化测试架构 1.1 企业现状分析 压力大:产品需求不明确,上线时间确定,压力山大. 混乱:未立项,开发时间已过半,前期无控制,后期无保障. 疲于应付:开发人员交付的文件质量差,测试跟 ...

  7. Backbone设计思路和关键源码分析

    一. Backbone的江湖地位: backbone作为一个老牌js框架为大规模前端开发提供了新的开发思路:前端MVC模式,这个模式也是前端开发演变过程中的一个重要里程碑,也为MVVM和Redux等开 ...

  8. 数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索

    UI自动化测试用例剖析 让我们先从分析一端自动化测试案例的代码开始我们的旅程.以下是我之前写的一个自动化测试的小Demo.这个Demo基于Selenium与Java.由于现在Selenium在自动化测 ...

  9. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

随机推荐

  1. JavaWeb总结(十五)

    AJAX(Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)) AJAX的作用是什么? 在无需重新加载整个网页的情况下,能够更新部分网页的技术 ...

  2. BZOJ2120_数颜色_KEY

    题目传送门 裸的带修莫队. 在Sort时如果左右区间都在同一块中,就按询问的修改的先后Sort. 对于每次查询判断向前或向后修改. 当size为N*2/3时据说是最优.O(N^(3/5)). code ...

  3. 学习OpenCV——SVM

    学习OpenCV——SVM 学习SVM,首先通过http://zh.wikipedia.org/wiki/SVM, 再通过博客http://blog.csdn.net/yang_xian521/art ...

  4. centos中如何添加环境变量

    在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时, ...

  5. Codeforces 374 C. Travelling Salesman and Special Numbers (dfs、记忆化搜索)

    题目链接:Travelling Salesman and Special Numbers 题意: 给了一个n×m的图,图里面有'N','I','M','A'四种字符.问图中能构成NIMA这种序列最大个 ...

  6. 【DOS】COPY命令

    一:文件复制COPY 指令说明:复制一个或更多文件到指定位置,可以合并文件 语法:COPY [/A/B] source[/A|/B] [+source [/A|/b] [+...]][destinat ...

  7. 180918-JDK之Deflater压缩与Inflater解压

    JDK 压缩与解压工具类 在实际的应用场景中,特别是对外传输数据时,将原始数据压缩之后丢出去,可以说是非常常见的一个case了,平常倒是没有直接使用JDK原生的压缩工具类,使用Protosutff和K ...

  8. mnist手写数字识别(决策树)

    import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.linear_model import ...

  9. 统计学习方法c++实现之七 提升方法--AdaBoost

    提升方法--AdaBoost 前言 AdaBoost是最经典的提升方法,所谓的提升方法就是一系列弱分类器(分类效果只比随机预测好一点)经过组合提升最后的预测效果.而AdaBoost提升方法是在每次训练 ...

  10. Laya 1.x 按文件夹TS代码合并

    Laya 1.x 使用TS开发时,经常会碰到代码文件太多,加载index.html时时间太长的问题.Laya编辑器貌似没有自带JS代码合并的功能.基于Laya去实现JS合并需要修改编辑器源码,合并JS ...