五、domain类创建

  在domain包中创建类:RemoteLanchInfo.java 用来保存启动信息。

  1. package com.lingfeng.domain;
  2.  
  3. public class RemoteLanchInfo {
  4. private String id;
  5. private String name;
  6. private String address;
  7.  
  8. public String getId() {
  9. return id;
  10. }
  11. public void setId(String id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public String getAddress() {
  21. return address;
  22. }
  23. public void setAddress(String address) {
  24. this.address = address;
  25. }
  26.  
  27. }

  这个javabean就是用来保存一条配置文件中的启动信息,后面会将这个javabean封装到集合中,以后需要到这些信息的时候调用起来也方便,比如碰到了IE6哪个页面不兼容,就可以使用名称来进行截图文件的命名,这样就知道了是哪个浏览器出了问题。

六、工具类,远程服务配置文件初始化类

   在utils包中创建java类RemoteServerInit.java

  1. package com.lingfeng.utils;
  2.  
  3. import java.io.File;
  4. import java.net.MalformedURLException;
  5. import java.net.URL;
  6. import java.util.ArrayList;
  7. import java.util.HashMap;
  8. import java.util.Iterator;
  9. import java.util.List;
  10. import java.util.Map;
  11.  
  12. import org.dom4j.Document;
  13. import org.dom4j.DocumentException;
  14. import org.dom4j.Element;
  15. import org.dom4j.io.SAXReader;
  16. import org.openqa.selenium.WebDriver;
  17. import org.openqa.selenium.remote.DesiredCapabilities;
  18. import org.openqa.selenium.remote.RemoteWebDriver;
  19.  
  20. import com.lingfeng.domain.RemoteLanchInfo;
  21.  
  22. /**
  23. * 远程服务器初始化类
  24. * @author 凌风
  25. *
  26. */
  27. public class RemoteServerInit {
  28. //存储读取配置文档
  29. private static Document DOCUMENT;
  30. //存储所有状态为on的远程服务端信息
  31. private static Map<String,RemoteLanchInfo> allLaunchInfoMap = new HashMap<String,RemoteLanchInfo>();
  32. //存储所有远程服务端浏览器启动的driver
  33. private static Map<String,WebDriver> allLaunchDriverMap = new HashMap<String, WebDriver>();
  34.  
  35. //在调用launchBrowser方法后,可用此方法获取到所有远程服务端的driver
  36. public static Map<String,WebDriver> getAllLaunchDriverMap(){
  37. return allLaunchDriverMap;
  38. }
  39. //在调用launchBrowser方法后,可用此方法获取到所有远程服务端的启动信息。
  40. public static Map<String,RemoteLanchInfo> getAllLaunchInfoMap(){
  41. return allLaunchInfoMap;
  42. }
  43.  
  44. public static void launchBrowser() throws DocumentException, MalformedURLException{
  45.  
  46. File file = new File("src/RemoteServerLaunchInfo.xml");
  47. DOCUMENT = readInitFile(file);
  48. List<Element> servers = getAllRemoteServers(DOCUMENT);
  49. Iterator<Element> it = servers.iterator();
  50. while(it.hasNext()){
  51. addWebDriver(allLaunchDriverMap,it);
  52. }
  53.  
  54. }
  55.  
  56. /**
  57. * 将启动信息以及相对应的driver存储到各自的map集合中
  58. *
  59. * @param allLaunchDriverMap
  60. * @param it
  61. * @throws MalformedURLException
  62. */
  63. private static void addWebDriver(
  64. Map<String, WebDriver> allLaunchDriverMap, Iterator<Element> it) throws MalformedURLException {
  65. Element e = it.next();
  66.  
  67. String remoteAddress = e.getText();
  68. String remoteID = e.attributeValue("ID");
  69. String remoteName = e.attributeValue("name");
  70.  
  71. //将启动的所有信息存储到javabean当中。
  72. RemoteLanchInfo info = setRemoteLanchInfo(remoteAddress,remoteID,remoteName);
  73. allLaunchInfoMap.put(remoteName, info);//启动的信息放到map集合中
  74.  
  75. DesiredCapabilities desiredCapabilities = DesiredCapabilities.internetExplorer();
  76. WebDriver driver = new RemoteWebDriver(new URL(remoteAddress), desiredCapabilities);
  77. allLaunchDriverMap.put(remoteName, driver);
  78. }
  79.  
  80. /**
  81. * 设置远程启动信息,作为一个作为一个对象保存到map集合中
  82. * @param remoteAddress
  83. * @param remoteID
  84. * @param remoteName
  85. * @return RemoteLanchInfo 远程启动信息
  86. */
  87. private static RemoteLanchInfo setRemoteLanchInfo(String remoteAddress,
  88. String remoteID, String remoteName) {
  89.  
  90. RemoteLanchInfo info = new RemoteLanchInfo();
  91. info.setAddress(remoteAddress);
  92. info.setId(remoteID);
  93. info.setName(remoteName);
  94. return info;
  95. }
  96.  
  97. public static String getHomepage(){
  98. return DOCUMENT.getRootElement().elementText("homepage");
  99. }
  100. /**
  101. * 将所有配置文件中的remote-server标签对象存储到list集合中
  102. * @param document
  103. * @return List<Element> 存储一个remote-server标签对象的一个集合。
  104. */
  105. private static List<Element> getAllRemoteServers(Document document) {
  106. List<Element> servers = new ArrayList<Element>();
  107. List<Element> list = document.getRootElement().elements("remote-server");
  108. Iterator<Element> it = list.iterator();
  109.  
  110. while(it.hasNext()){
  111. Element element = (Element) it.next();
  112. if(element.attributeValue("status").equals("on")){
  113. servers.add(element);
  114. }
  115. }
  116. return servers;
  117. }
  118. /**
  119. * 读取配置文件,返回文件
  120. * @param file
  121. * @return Document
  122. * @throws DocumentException
  123. */
  124. public static Document readInitFile(File file) throws DocumentException {
  125. SAXReader reader = new SAXReader();
  126. return reader.read(file);
  127. }
  128. }

未完待续!!!马上奉上!!!

selenium之多线程启动grid分布式测试框架封装(二)的更多相关文章

  1. selenium之多线程启动grid分布式测试框架封装(四)

    九.工具类,启动所有远程服务的浏览器 在utils包中创建java类:LaunchAllRemoteBrowsers package com.lingfeng.utils; import java.n ...

  2. selenium之多线程启动grid分布式测试框架封装(一)

    一.设计思路 在国内市场上,IE内核的浏览器占据了绝大部分的市场份额,那么此次框架封装将进行IE系列的浏览器进行多线程并发执行分布式测试的封装. 运行时主进程与多线程关系如下:

  3. selenium之多线程启动grid分布式测试框架封装(三)

    七.工具类,线程监控器类创建 utils包中,创建java类:RemoteThreadStatusMonitor.java package com.lingfeng.utils; /** * 此监控器 ...

  4. Selenium Grid分布式测试入门详解

    本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...

  5. Pytest测试框架(二):pytest 的setup/teardown方法

    PyTest支持xUnit style 结构, setup() 和 teardown() 方法用于初始化和清理测试环境,可以保证测试用例的独立性.pytest的setup/teardown方法包括:模 ...

  6. python pytest测试框架介绍二

    在介绍一中简单介绍了pytest的安装和简单使用,接下来我们就要实际了解pytest了 一.pytest的用例发现规则 pytest可以在不同的函数.包中发现用例,发现的规则如下 文件名以test_开 ...

  7. Selenium Grid分布式测试环境搭建

    Selenium Grid简介 Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成.Hub用来管理各个代理节点的注册信息 ...

  8. Jmeter分布式测试搭建(二)

    Jmeter运行的时候十分耗内存和cpu,跑到500多个进程的时候,就卡死了.我们测试时,如果进行大数据量的并发测试时,单个电脑的CPU和内存可能无法承受,这个时候,我们需要进行一个分布式的测试,比如 ...

  9. 大型分布式C++框架《二:大包处理过程》

    本来这一篇是打算写包头在分布式平台中的具体变换过程的.其实文章已经写好了.但是想了这个应该是不能随便发表的.毕竟如果知道了一个包的具体每个字节的意义.能伪造包来攻击系统.其次来介绍一个包的具体变换过程 ...

随机推荐

  1. php中国的垃圾问题

    header这条线加,这是解决中国乱码的问题. 版权声明:本文博主原创文章,博客,未经同意不得转载.

  2. Android中的应用——谷歌官方Json分析工具Gson使用

    一个.Gson基本介绍 Gson(又称Google Gson)是Google公司公布的一个开放源码的Java库.主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象. ...

  3. WPF学习(2)XAML

    XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)是一种声明式的编程语言,遵循XML的语法.WPF使用XAML来设计UI具有易用性.高效性 ...

  4. 分布式中使用Redis实现Session共享(转)

    上一篇介绍了如何使用nginx+iis部署一个简单的分布式系统,文章结尾留下了几个问题,其中一个是"如何解决多站点下Session共享".这篇文章将会介绍如何使用Redis,下一篇 ...

  5. height/innerHeight/outerHeight

    <script> $(document).ready(function(){ alert("height:"+$("#div").height()) ...

  6. Boost.Asio c++ 网络编程翻译(26)

    Boost.Asio-其他特性 这章我们讲了解一些Boost.Asio不那么为人所知的特性.标准的stream和streambuf对象有时候会更难用一些,但正如你所见.它们也有它们的益处.最后,你会看 ...

  7. 设计模式(Facade)状态(注意事项)

    外观模式(Facade),子系统的一组接口提供一个一致的界面,该模式定义了一个高层次接口,这个接口使得这一子系统更加easy采用. 外观模式完美地体现了依赖反转原则,迪米特法则的想法,式之中的一个. ...

  8. SQLServer 存储过程嵌套事务处理

    原文:SQLServer 存储过程嵌套事务处理 某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形. 下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否 ...

  9. 补间动画实现(tween)

    1.补间动画的概念: 补间动画:仅仅须要开发人员设置好动画的開始与结束的关键帧 中间帧有喜用计算机补齐. 2.种类:分为4种: ①alpha 透明度 ②alpha 透明度 ③translate 位置移 ...

  10. 左右GNU Linux企业加密文件系统 eCryptfs简介

    /*********************************************************************  * Author  : Samson  * Date   ...