五、domain类创建

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

package com.lingfeng.domain;

public class RemoteLanchInfo {
private String id;
private String name;
private String address; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} }

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

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

   在utils包中创建java类RemoteServerInit.java

package com.lingfeng.utils;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver; import com.lingfeng.domain.RemoteLanchInfo; /**
* 远程服务器初始化类
* @author 凌风
*
*/
public class RemoteServerInit {
//存储读取配置文档
private static Document DOCUMENT;
//存储所有状态为on的远程服务端信息
private static Map<String,RemoteLanchInfo> allLaunchInfoMap = new HashMap<String,RemoteLanchInfo>();
//存储所有远程服务端浏览器启动的driver
private static Map<String,WebDriver> allLaunchDriverMap = new HashMap<String, WebDriver>(); //在调用launchBrowser方法后,可用此方法获取到所有远程服务端的driver
public static Map<String,WebDriver> getAllLaunchDriverMap(){
return allLaunchDriverMap;
}
//在调用launchBrowser方法后,可用此方法获取到所有远程服务端的启动信息。
public static Map<String,RemoteLanchInfo> getAllLaunchInfoMap(){
return allLaunchInfoMap;
} public static void launchBrowser() throws DocumentException, MalformedURLException{ File file = new File("src/RemoteServerLaunchInfo.xml");
DOCUMENT = readInitFile(file);
List<Element> servers = getAllRemoteServers(DOCUMENT);
Iterator<Element> it = servers.iterator();
while(it.hasNext()){
addWebDriver(allLaunchDriverMap,it);
} } /**
* 将启动信息以及相对应的driver存储到各自的map集合中
*
* @param allLaunchDriverMap
* @param it
* @throws MalformedURLException
*/
private static void addWebDriver(
Map<String, WebDriver> allLaunchDriverMap, Iterator<Element> it) throws MalformedURLException {
Element e = it.next(); String remoteAddress = e.getText();
String remoteID = e.attributeValue("ID");
String remoteName = e.attributeValue("name"); //将启动的所有信息存储到javabean当中。
RemoteLanchInfo info = setRemoteLanchInfo(remoteAddress,remoteID,remoteName);
allLaunchInfoMap.put(remoteName, info);//启动的信息放到map集合中 DesiredCapabilities desiredCapabilities = DesiredCapabilities.internetExplorer();
WebDriver driver = new RemoteWebDriver(new URL(remoteAddress), desiredCapabilities);
allLaunchDriverMap.put(remoteName, driver);
} /**
* 设置远程启动信息,作为一个作为一个对象保存到map集合中
* @param remoteAddress
* @param remoteID
* @param remoteName
* @return RemoteLanchInfo 远程启动信息
*/
private static RemoteLanchInfo setRemoteLanchInfo(String remoteAddress,
String remoteID, String remoteName) { RemoteLanchInfo info = new RemoteLanchInfo();
info.setAddress(remoteAddress);
info.setId(remoteID);
info.setName(remoteName);
return info;
} public static String getHomepage(){
return DOCUMENT.getRootElement().elementText("homepage");
}
/**
* 将所有配置文件中的remote-server标签对象存储到list集合中
* @param document
* @return List<Element> 存储一个remote-server标签对象的一个集合。
*/
private static List<Element> getAllRemoteServers(Document document) {
List<Element> servers = new ArrayList<Element>();
List<Element> list = document.getRootElement().elements("remote-server");
Iterator<Element> it = list.iterator(); while(it.hasNext()){
Element element = (Element) it.next();
if(element.attributeValue("status").equals("on")){
servers.add(element);
}
}
return servers;
}
/**
* 读取配置文件,返回文件
* @param file
* @return Document
* @throws DocumentException
*/
public static Document readInitFile(File file) throws DocumentException {
SAXReader reader = new SAXReader();
return reader.read(file);
}
}

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

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. NBA球员 ESPN前20排名:詹姆斯再居榜首

    2014年 ESPN球员实力最后排名 没想到 保罗-乔治没有上榜.之前预測的火箭两大明星排名落后了,杜兰特排到第8有点出乎意料. 戴维斯升得那么快有点出乎意料,一个球队拥有两位排前十位的球队:骑士,快 ...

  2. Bean Validation 技术规范特性概述

    概述 Bean Validation 规范 Bean 是 Java Bean 的缩写.在 Java 分层架构的实际应用中,从表示层到持久化层.每一层都须要对 Java Bean 进行业务符合性验证,如 ...

  3. Calendar计算日期

    一.周六三月进去.星期天 Calendar calendar=Calendar.getInstance();//当前日期 Calendar calendar2=Calendar.getInstance ...

  4. bsh for android : 北京

    beanshell : bjtime.bsh source("/sdcard/com.googlecode.bshforandroid/extras/bsh/android.bsh" ...

  5. nodejs 复制、移动文件

    对路径没有做验证 复制文件 var fs = require('fs'); var path = require('path'); var fileName = "coverflow-3.0 ...

  6. css3 翻牌(rotate) 以及翻转 导致边缘锯齿解决 方法

     主要知识点:rotate旋转以及  outline透明的像素消除(明显降低)火狐旋转是产生的 锯齿  首先看结构: <li class="flip-container " ...

  7. css Tab选项卡2

    注意上述 红色方框   这个是锚点的变相  以及overflow:hiden结合, 利用  锚点对应 id  ,  也可以实现. 兼容ie6+  适合手机tab 简单   不需要脚本 其实还可以利用 ...

  8. Java学习笔记——泛型

    假定T不仅要指定接口的类继承.使用下面的方式: public class some<T extends Iterable<T> & Comparable<T>&g ...

  9. JavaScript之包装对象

    JavaScript对象是一种复合值:它是属性和已命名值的集合.通过"."符号来引用属性值.当属性值是一个函数时,称为方法. ①一段你常用但却未必明白其真正底层原理的代码: var ...

  10. Xcode HeaderDoc 过程(1)

    原版的: http://www.raywenderlich.com/66395/documenting-in-xcode-with-headerdoc-tutorial 了解如何从代码中生成文档! X ...