selenium之多线程启动grid分布式测试框架封装(二)
五、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分布式测试框架封装(二)的更多相关文章
- selenium之多线程启动grid分布式测试框架封装(四)
九.工具类,启动所有远程服务的浏览器 在utils包中创建java类:LaunchAllRemoteBrowsers package com.lingfeng.utils; import java.n ...
- selenium之多线程启动grid分布式测试框架封装(一)
一.设计思路 在国内市场上,IE内核的浏览器占据了绝大部分的市场份额,那么此次框架封装将进行IE系列的浏览器进行多线程并发执行分布式测试的封装. 运行时主进程与多线程关系如下:
- selenium之多线程启动grid分布式测试框架封装(三)
七.工具类,线程监控器类创建 utils包中,创建java类:RemoteThreadStatusMonitor.java package com.lingfeng.utils; /** * 此监控器 ...
- Selenium Grid分布式测试入门详解
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- Pytest测试框架(二):pytest 的setup/teardown方法
PyTest支持xUnit style 结构, setup() 和 teardown() 方法用于初始化和清理测试环境,可以保证测试用例的独立性.pytest的setup/teardown方法包括:模 ...
- python pytest测试框架介绍二
在介绍一中简单介绍了pytest的安装和简单使用,接下来我们就要实际了解pytest了 一.pytest的用例发现规则 pytest可以在不同的函数.包中发现用例,发现的规则如下 文件名以test_开 ...
- Selenium Grid分布式测试环境搭建
Selenium Grid简介 Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成.Hub用来管理各个代理节点的注册信息 ...
- Jmeter分布式测试搭建(二)
Jmeter运行的时候十分耗内存和cpu,跑到500多个进程的时候,就卡死了.我们测试时,如果进行大数据量的并发测试时,单个电脑的CPU和内存可能无法承受,这个时候,我们需要进行一个分布式的测试,比如 ...
- 大型分布式C++框架《二:大包处理过程》
本来这一篇是打算写包头在分布式平台中的具体变换过程的.其实文章已经写好了.但是想了这个应该是不能随便发表的.毕竟如果知道了一个包的具体每个字节的意义.能伪造包来攻击系统.其次来介绍一个包的具体变换过程 ...
随机推荐
- php中国的垃圾问题
header这条线加,这是解决中国乱码的问题. 版权声明:本文博主原创文章,博客,未经同意不得转载.
- Android中的应用——谷歌官方Json分析工具Gson使用
一个.Gson基本介绍 Gson(又称Google Gson)是Google公司公布的一个开放源码的Java库.主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象. ...
- WPF学习(2)XAML
XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)是一种声明式的编程语言,遵循XML的语法.WPF使用XAML来设计UI具有易用性.高效性 ...
- 分布式中使用Redis实现Session共享(转)
上一篇介绍了如何使用nginx+iis部署一个简单的分布式系统,文章结尾留下了几个问题,其中一个是"如何解决多站点下Session共享".这篇文章将会介绍如何使用Redis,下一篇 ...
- height/innerHeight/outerHeight
<script> $(document).ready(function(){ alert("height:"+$("#div").height()) ...
- Boost.Asio c++ 网络编程翻译(26)
Boost.Asio-其他特性 这章我们讲了解一些Boost.Asio不那么为人所知的特性.标准的stream和streambuf对象有时候会更难用一些,但正如你所见.它们也有它们的益处.最后,你会看 ...
- 设计模式(Facade)状态(注意事项)
外观模式(Facade),子系统的一组接口提供一个一致的界面,该模式定义了一个高层次接口,这个接口使得这一子系统更加easy采用. 外观模式完美地体现了依赖反转原则,迪米特法则的想法,式之中的一个. ...
- SQLServer 存储过程嵌套事务处理
原文:SQLServer 存储过程嵌套事务处理 某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形. 下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否 ...
- 补间动画实现(tween)
1.补间动画的概念: 补间动画:仅仅须要开发人员设置好动画的開始与结束的关键帧 中间帧有喜用计算机补齐. 2.种类:分为4种: ①alpha 透明度 ②alpha 透明度 ③translate 位置移 ...
- 左右GNU Linux企业加密文件系统 eCryptfs简介
/********************************************************************* * Author : Samson * Date ...