zoukankan      html  css  js  c++  java
  • selenium 关键字驱动部分设计思路

    1

    说明:

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

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

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

    7.person 和 MoveDisk类

     1 package keyWordsDriver;
     2 
     3 /**
     4  * 
     5  */
     6 public class Person {
     7    void getTheCommandFromTeacher(){}
     8     void findTheDeskAtA(){}
     9     void moveDeskToB(){}
    10     void notifyTeacherHadFinished(){}
    11 }
    12 
    13 package keyWordsDriver;
    14 
    15 /**
    16  * 
    17  */
    18 public class MoveDesk {
    19 
    20     private Person zhangsan;
    21 
    22 
    23     public void setZhangsan(Person zhangsan) {
    24         this.zhangsan = zhangsan;
    25     }
    26 
    27     public void setZhangsan() {
    28         System.out.println("
    ");
    29         System.out.println("大家好我是张三,你现在执行的方法为:setZhangsan()");
    30         this.zhangsan = new Person();
    31         System.out.println("
    ");
    32     }
    33 
    34     public void moveDeskFromA2B() {
    35         zhangsan.getTheCommandFromTeacher();
    36         zhangsan.findTheDeskAtA();
    37         zhangsan.moveDeskToB();
    38         zhangsan.notifyTeacherHadFinished();
    39     }
    40 }

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

     1 package keyWordsDriver;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 /**
     7  * 1.根据张三 ,得到张三的className,通过className得到张三这个对象,然后再执行张三所要执行的方法(setZhangsan)
     8  */
     9 public class KeywordReflect {
    10 
    11     public static Map<String, Map<String, String>> KEYWORD_POOLS = new HashMap<String, Map<String, String>>();
    12     static{
    13         KEYWORD_POOLS.put("张三", KeywordReflect.methodInfo(MoveDesk.class.getName(), "setZhangsan"));
    14         KEYWORD_POOLS.put("把桌子从A地点搬到B地点", KeywordReflect.methodInfo(MoveDesk.class.getName(), "moveDeskFromA2B"));
    15     }
    16 
    17     public static Map<String, String> methodInfo(String className, String methodName){
    18         Map<String, String> methodInfo = new HashMap<String, String>();
    19         methodInfo.put("class", className);
    20         methodInfo.put("method", methodName);
    21         return methodInfo;
    22 
    23     }
    24 
    25   static void  print() {
    26        for (Map.Entry<String, Map<String, String>> entrys : KEYWORD_POOLS.entrySet()
    27                ) {
    28            System.out.println("entrys.getKey()="+entrys.getKey());
    29          Map<String,String> values = entrys.getValue();
    30            for (Map.Entry<String, String> entyr2 : values.entrySet()
    31                    ) {
    32                System.out.println(entyr2);
    33            }
    34        }
    35    }
    36 
    37     public static void main(String[] args) {
    38         KeywordReflect.print();
    39     }
    40 
    41 
    42 }


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

     1 package keyWordsDriver;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 /**
     7  * 这是对象的注册中心 ;
     8  */
     9 public class RegisterCenter {
    10     public static Map<String, Object> OBJ_POOLS = new HashMap<String, Object>();
    11     static{
    12         OBJ_POOLS.put(MoveDesk.class.getName(), new MoveDesk());
    13     }
    14 
    15 }

    10.解析关键

     1 package keyWordsDriver;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.regex.Matcher;
     6 import java.util.regex.Pattern;
     7 
     8 /**
     9  * 
    10  */
    11 public class RegExp {
    12     public boolean match(String reg, String str) {
    13         return Pattern.matches(reg, str);
    14     }
    15 
    16     public List<String> find(String reg, String str) {
    17         Matcher matcher = Pattern.compile(reg).matcher(str);
    18         List<String> list = new ArrayList<String>();
    19         while (matcher.find()) {
    20             list.add(matcher.group());
    21         }
    22         return list;
    23     }
    24 
    25 }
    26 
    27 package keyWordsDriver;
    28 
    29 import java.util.List;
    30 
    31 /**
    32  * ParseKeyword 用于解析关键字,需要指定的格式 ;
    33  */
    34 public class ParseKeyword {
    35     public List<String> getKeywords(String p) {
    36         String reg = "(?<=(?<!\\)\$\{)(.*?)(?=(?<!\\)\})";
    37         RegExp re = new RegExp();
    38         List<String> list = re.find(reg, p);
    39         return list;
    40 
    41     }
    42 
    43     public static void main(String[] args) {
    44 
    45         ParseKeyword p = new ParseKeyword();
    46         System.out.println(p.getKeywords("${张三},去${把桌子从A地点搬到B地点}"));
    47         System.out.println(p.getKeywords("a${a}a"));
    48         System.out.println(p.getKeywords("a\${a}a"));
    49         System.out.println(p.getKeywords("a${a\}a"));
    50         System.out.println(p.getKeywords("a${a\}a}a"));
    51         System.out.println(p.getKeywords("a${a}a${"));
    52         System.out.println(p.getKeywords("a${ab}a${a}"));
    53 
    54     }
    55 
    56 }


    11,方法执行的过程:

      1 package keyWordsDriver;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.InputStreamReader;
      7 import java.lang.reflect.InvocationTargetException;
      8 import java.lang.reflect.Method;
      9 import java.util.ArrayList;
     10 import java.util.List;
     11 import java.util.Map;
     12 
     13 /**
     14  * 利用反射进行方法的执行 ;
     15  */
     16 
     17 public class Executor {
     18     private ParseKeyword pk = new ParseKeyword();
     19 
     20     public List<String> readTxtFile(String filePath) {
     21         List<String> list = new ArrayList<String>();
     22         try {
     23             String encoding = "UTF8";
     24             File file = new File(filePath);
     25             if (file.isFile() && file.exists()) {
     26                 InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
     27                 BufferedReader bufferedReader = new BufferedReader(read);
     28                 String lineTxt = null;
     29                 while ((lineTxt = bufferedReader.readLine()) != null) {
     30                     list.add(lineTxt);
     31                    // System.out.println(" : "+lineTxt);
     32                 }
     33                 read.close();
     34                 bufferedReader.close();
     35             } else {
     36                 System.out.println("找不到指定的文件");
     37             }
     38         } catch (Exception e) {
     39             System.out.println("读取文件内容出错");
     40             e.printStackTrace();
     41         }
     42         return list;
     43     }
     44 
     45    void print() {
     46        String path = ClassLoader.getSystemClassLoader().getResource("command.txt").getPath();
     47        List<String> lists = this.readTxtFile(path);
     48        System.out.print("lists 总共有:"+lists.size()+"行 内容为:  ");
     49        for (String vaule : lists
     50                ) {
     51            System.out.print(vaule);
     52        }
     53    }
     54 
     55 
     56     public void executor() {
     57         String path = ClassLoader.getSystemClassLoader().getResource("command.txt").getPath();
     58         List<String> commands = this.readTxtFile(path);
     59         for (String command : commands) {
     60             System.out.println("---------------------------------------------");
     61             System.out.println("%%%%%%%%%%%%%%%%%%"+"command="+command+"  %%%%%%%%%%%%%%%%%%%%%%");
     62             List<String> keywords = pk.getKeywords(command);
     63 
     64             for (String keyword : keywords) {
     65                 this.invoke(keyword);
     66             }
     67             System.out.println("---------------------------------------------");
     68         }
     69     }
     70 
     71 
     72     public void invoke(String keyword) {
     73         System.out.println("keyword="+keyword);
     74         Map<String, String> keyMethod = KeywordReflect.KEYWORD_POOLS.get(keyword);
     75         System.out.println("keyMethod="+keyMethod);
     76         String className = keyMethod.get("class");
     77         System.out.println("className="+className);
     78         String methodName = keyMethod.get("method");
     79         System.out.println("methodName="+methodName);
     80         Object obj = RegisterCenter.OBJ_POOLS.get(className);
     81         System.out.println("obj="+obj);
     82         Method method = this.getMethod(methodName, obj);
     83         System.out.println("method="+method);
     84         try {
     85             method.invoke(obj);
     86         } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
     87             e.printStackTrace();
     88 
     89         }
     90 
     91     }
     92 
     93 
     94     private Method getMethod(String methodName, Object obj) {
     95         try {
     96             System.out.println("methodName="+methodName+";   obj="+obj.getClass().getName());
     97             Method[] methods = obj.getClass().getMethods();
     98             for (Method m : methods) {
     99                 if (m.getName().equals(methodName)) {
    100                     return m;
    101                 }
    102             }
    103         } catch (SecurityException e) {
    104             return null;
    105         }
    106         return null;
    107     }
    108 
    109 
    110     public static void main(String[] args) {
    111         Executor e = new Executor();
    112         e.print();
    113         e.executor();
    114     }
    115 
    116 
    117 }


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

     1 "C:Program FilesJavajdk1.8.0_65injava" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:CustomSofterdevelopIDEAIntelliJ IDEA Community Edition 2016.2.4in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.8.0_65jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_65jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_65jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_65jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_65jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_65jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_65jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_65jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_65jrelibext
    ashorn.jar;C:Program FilesJavajdk1.8.0_65jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_65jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_65jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_65jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_65jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_65jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_65jrelibjce.jar;C:Program FilesJavajdk1.8.0_65jrelibjfr.jar;C:Program FilesJavajdk1.8.0_65jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_65jrelibjsse.jar;C:Program FilesJavajdk1.8.0_65jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_65jrelibplugin.jar;C:Program FilesJavajdk1.8.0_65jrelib
    esources.jar;C:Program FilesJavajdk1.8.0_65jrelib
    t.jar;C:CustomSofterdevelopIDEAIdeaWorkspace_1JaraProoutproductionJaraPro;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0selenium-java-2.47.0.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsapache-mime4j-0.6.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libssh-1.3.0.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libscglib-nodep-2.1_3.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libscommons-codec-1.10.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libscommons-collections-3.2.1.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libscommons-exec-1.3.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libscommons-io-2.4.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libscommons-lang3-3.4.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libscommons-logging-1.1.3.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libscssparser-0.9.16.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsgson-2.3.1.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsguava-18.0.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libshamcrest-core-1.3.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libshamcrest-library-1.3.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libshtmlunit-2.17.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libshtmlunit-core-js-2.17.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libshttpclient-4.4.1.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libshttpcore-4.4.1.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libshttpmime-4.4.1.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsjcommander-1.29.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsjetty-io-9.2.11.v20150529.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsjetty-util-9.2.11.v20150529.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsjna-4.1.0.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsjna-platform-4.1.0.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsjunit-4.12.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libs
    ekohtml-1.9.22.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libs
    etty-3.5.7.Final.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsphantomjsdriver-1.2.1.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libssac-1.3.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsserializer-2.7.2.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libs	estng-6.8.5.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libswebsocket-api-9.2.11.v20150529.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libswebsocket-client-9.2.11.v20150529.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libswebsocket-common-9.2.11.v20150529.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsxalan-2.7.2.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsxercesImpl-2.11.0.jar;C:CustomSofterdevelopIDEAsofterwareJARseleniumJarselenium-2.47.0libsxml-apis-1.4.01.jar;C:CustomSofterdevelopIDEAsofterwareJARothersJARjyamljyaml-1.3.jar;C:CustomSofterdevelopIDEAIntelliJ IDEA Community Edition 2016.2.4libidea_rt.jar" com.intellij.rt.execution.application.AppMain keyWordsDriver.Executor
     2 lists 总共有:1行 内容为:  ${张三},去${把桌子从A地点搬到B地点}”,---------------------------------------------
     3 %%%%%%%%%%%%%%%%%%command=${张三},去${把桌子从A地点搬到B地点}”,  %%%%%%%%%%%%%%%%%%%%%%
     4 keyword=张三
     5 keyMethod={method=setZhangsan, class=keyWordsDriver.MoveDesk}
     6 className=keyWordsDriver.MoveDesk
     7 methodName=setZhangsan
     8 obj=keyWordsDriver.MoveDesk@5674cd4d
     9 methodName=setZhangsan;   obj=keyWordsDriver.MoveDesk
    10 method=public void keyWordsDriver.MoveDesk.setZhangsan()
    11 
    12 
    13 大家好我是张三,你现在执行的方法为:setZhangsan()
    14 
    15 
    16 keyword=把桌子从A地点搬到B地点
    17 keyMethod={method=moveDeskFromA2B, class=keyWordsDriver.MoveDesk}
    18 className=keyWordsDriver.MoveDesk
    19 methodName=moveDeskFromA2B
    20 obj=keyWordsDriver.MoveDesk@5674cd4d
    21 methodName=moveDeskFromA2B;   obj=keyWordsDriver.MoveDesk
    22 method=public void keyWordsDriver.MoveDesk.moveDeskFromA2B()
    23 ---------------------------------------------
    24 
    25 Process finished with exit code 0
  • 相关阅读:
    解决SSH连接Linux超时自动断开
    小程序选项卡
    vue 封装axios 请求 统一管理方法1
    vue 中使用echar
    vue element 做表格分页
    vue echar使用
    旋转
    vue 登录切换页面
    vue 根据输入的身份号码,自动获取年龄
    vue 手机号码验证 。点击获取验证码
  • 原文地址:https://www.cnblogs.com/linbo3168/p/8560201.html
Copyright © 2011-2022 走看看