五、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. 微软系统工具套件SysinternalsSuite各个工具功能说明

    下载地址:http://download.sysinternals.com/files/SysinternalsSuite.zip 工具名    工具说明 Accesschk      Windows ...

  2. 单元测试React

    React单元测试——十八般兵器齐上阵,环境构建篇 一个完整.优秀的项目往往离不开单元测试的环节,就 github 上的主流前端项目而言,基本都有相应的单元测试模块. 就 React 的项目来说,一套 ...

  3. 使用RESTClient插件数据模拟(GET,POST)提交

    1:在Firefox下载RESTClient插件安装 2:安装界面后, 3:点击设置头文件:(设请求地址有头部文件) 4:设置界面,当然有非常多选择.依据你的须要.一般在输入的时候有智能提示,我这里以 ...

  4. PS 过滤器——运动模糊

    %%%%%  motion blur clc; clear all; close all; Image=imread('4.jpg'); Image=double(Image); theta=pi/4 ...

  5. C#开发中使用配置文件

    C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...

  6. Android新浪微博client(七)——ListView图片异步加载、高速缓存

    原文出自:方杰|p=193" style="color:rgb(202,0,0); text-decoration:none; font-size:14px; font-famil ...

  7. 拆分字段优化SQL

    拆分字段优化SQL 今天看到一条用函数处理连接的SQL,是群里某位网友的,SQL语句如下: SELECT SO_Order.fdate , SO_Order.fsn FROM so_order INN ...

  8. Class loader:static

    package classloader; public class ClassLoaderDisplayDemo { public static void main(String[] args) { ...

  9. 文件I/O之-打开文件在内核中的表示

    在unix系统中,一切皆文件.系统把文件夹.字符设备.块设备.套接字都当做文件来对待.对于文件的操作,使用I/O函数,这里所说的I/O函数是指系统调用.大多数文件的I/O要用到这5个函数:open.r ...

  10. async和await关键字实现异步编程

    async和await关键字实现异步编程 异步编程   概念 异步编程核心为异步操作,该操作一旦启动将在一段时间内完成.所谓异步,关键是实现了两点:(1)正在执行的此操作,不会阻塞原来的线程(2)一旦 ...