selenium grid Quick Start

selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。

1、启动Selenium-Server

1)下载 selenium-server-standalone-*.jar,地址:http://selenium-release.storage.googleapis.com/index.html?path=2.41/

2)启动selenium server并注册hub  (假设hub服务器机器selenium-server版本为2.41,本机IP为192.32.50.26)

到selenium-server-standalone-*.jar 包放置目录下执行:java -jar selenium-server-standalone-2.41.0.jar -role hub -port 4441  (未指定port时,hub默认4444)

3)本地或者远程机器, 都可以启动多个node

a.本地启动:

默认: java -jar selenium-server-standalone-2.41.0.jar -role node            (默认的注册地址:http://localhost:4444/grid/register,node默认端口:5555)

指定hub: java -jar selenium-server-standalone-2.41.0.jar -role node  -hub http://localhost:4441/grid/register

b.远程启动:

远程同样需要下载selenium-Server jar包,启动如下:  (假设远程版本为2.29)

java -jar selenium-server-standalone-2.29.0.jar -role node -hub http://192.32.50.26:4441/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe  -browser browserName=chrome  -port 6666

2、具体应用

public class RemoteWebDriverDesiredCapTest {
@Test
public void myTest() throws MalformedURLException{
/**
* 1、本地机器启动了主节点hub (假設本台机器IP:192.32.50.26,http://localhost:4444/grid/console 查看节点连接情况)
* java -jar selenium-server-standalone-2.41.0.jar -role hub (默认端口4444)
* 2、本地也启动了一个该hub 次节点A
* java -jar selenium-server-standalone-2.41.0.jar -role node
* (默认的注册地址:http://localhost:4444/grid/register,node默认端口:5555)
* (具体设置:java -jar selenium-server-standalone-2.41.0.jar -role node -port 5556 -hub http://localhost:4441/grid/register)
* 3、本机器装有firefox, chrome,所以通过该次节点A, 可以用firefox来运行脚本, 也可以用chrome
* FF驱动默认在webDriver中了, 而chrome驱动需要自己指定, chromeDriver.exe ,运行chromeDriver(默认使用端口9515)
*/

//node:java -jar selenium-server-standalone-2.41.0.jar -role node
DesiredCapabilities capability = DesiredCapabilities.firefox();
capability.setPlatform(Platform.VISTA);
WebDriver driver = new RemoteWebDriver(new URL("http://192.32.50.26:5555/wd/hub"), capability);
driver.get("http://www.baidu.com");
System.out.println(driver.getCurrentUrl());
driver.quit(); // node: 直接运行chromedriver.exe时, 通过http://xxx.xxx.xxx.xxx:9515 就可以取得chrome; 或者像 下面指定-Dwebdriver.chrome.driver -port,形式
DesiredCapabilities aDesiredcap =new DesiredCapabilities("chrome","",Platform.VISTA);
WebDriver wd = new RemoteWebDriver(new URL("http://localhost:9515"), aDesiredcap);
wd.get("https://code.google.com/p/selenium/wiki/Grid2");
System.out.println(wd.getCurrentUrl());
wd.quit(); //node:java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.ie.driver=IEDriverServer.exe -browser browserName=iexplore -port 7776
DesiredCapabilities iDesiredcap =new DesiredCapabilities("iexplore","",Platform.VISTA);
WebDriver wdE = new RemoteWebDriver(new URL("http://192.32.50.26:7776/wd/hub"), iDesiredcap);
wdE.get("https://code.google.com/p/selenium/wiki/Grid2");
System.out.println(wdE.getCurrentUrl());
wdE.quit(); //用另一台机器作为次节点连接 , (假設IP為: 192.32.52.51 )
//java -jar selenium-server-standalone-2.29.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe -browser browserName=chrome -port 6666
DesiredCapabilities chrome =new DesiredCapabilities("chrome","",Platform.XP);
WebDriver driverChrome = new RemoteWebDriver(new URL("http://192.32.52.51:6666/wd/hub"), chrome);
driverChrome.get("http://www.cnblogs.com/");
driverChrome.quit();
}
}

3、做成多线程方式

Selenium Grid只是提供多系统、多浏览器的执行环境,而不是说任务一个test case丢给它就能并行运行。并行的运行我这里就交给testng了

如下代码和配置:

1)testcase 代码:

package com.jennifer.test;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test; public class GridParallelTests {
private WebDriver dr;
DesiredCapabilities desireCap; @Parameters({ "browser", "nodeUrl"})
@BeforeMethod
public void setUp(String browser, String nodeUrl) {
if (browser.equals("ie")){
desireCap = DesiredCapabilities.internetExplorer();
}
else if (browser.equals("ff"))
desireCap = DesiredCapabilities.firefox();
else if (browser.equals("chrome"))
desireCap = DesiredCapabilities.chrome();
else
System.out.println("browser parameter wrong , can only be :ie、 ff、chrome"); String url = nodeUrl + "/wd/hub";
URL urlInstance = null;
try {
urlInstance = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
dr = new RemoteWebDriver(urlInstance, desireCap);
} @Test
public void test() {
dr.get("http://www.baidu.com/");
dr.findElement(By.id("kw1")).sendKeys("selenium");
dr.findElement(By.id("su1")).click();
System.out.println("title:" + dr.getTitle());
}
@AfterMethod
public void quit() {
dr.close();
}
}

2)testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite1" parallel="tests" thread-count="5">
<test name="test1">
<parameter name="browser" value="ff" />
<parameter name="nodeUrl" value="http://192.32.50.26:5555"/>
<classes>
<class name="com.jennifer.test.GridParallelTests"></class>
</classes>
</test> <test name="test2">
<!-- java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.chrome.driver=chromedriver29.exe -browser browserName=chrome -port 6666 -->
<parameter name="browser" value="chrome" />
<parameter name="nodeUrl" value="http://192.32.50.26:6666" />
<classes>
<class name="com.jennifer.test.GridParallelTests"></class>
</classes>
</test> <test name="test3">
<!-- java -jar selenium-server-standalone-2.41.0.jar -role node -hub http://192.32.50.26:4444/grid/register -Dwebdriver.ie.driver=IEDriverServer.exe -browser browserName=iexplore -port 7776 -->
<parameter name="browser" value="ie" />
<parameter name="nodeUrl" value="http://192.32.50.26:7776" />
<classes>
<class name="com.jennifer.test.GridParallelTests"></class>
</classes>
</test>
</suite>

selenium Grid(一)的更多相关文章

  1. 搭建selenium grid简单配置

    1.使用selenium提供的服务端独立jar包 :服务端.客户端都是运行于java7环境. 2.启动hub: hub配置文件如下: Java -jar selenium-server-standal ...

  2. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  3. Selenium Grid 学习笔记

    Selenium Grid 学习笔记http://www.docin.com/p-765680298.html

  4. Selenium Grid 运行报错 Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities

    Selenium Grid 运行报错 : Exception thrown in Navigator.Start first time ->Error forwarding the new se ...

  5. selenium Grid

    Selenium Grid 的机制是启动一个 hub,然后启动多个 Selenium RC 注册到 hub 上, 当测试请求到 hub 时,hub 会将测试分发给 Selenium RC, Selen ...

  6. selenium grid java 资料

    Grid TestNG: 使用Selenium Grid改进Web应用程序的测试: http://www.ithov.com/server/117464.shtml

  7. Selenium Grid跨浏览器-兼容性测试

    Selenium Grid跨浏览器-兼容性测试 这里有两台机子,打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.16 ...

  8. selenium grid的使用与配置

    一.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测 ...

  9. 转:Selenium Grid深入学习

    应网友要求写一个用Selenium Grid控制多系统多浏览器并行执行test case的例子. 因为我这里有两台机子,我打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub ...

随机推荐

  1. [置顶] 《Windows编程零基础》__2 一个完整的程序

    Windows开发的常识 1)窗口 Windows中最基本的概念也许就是窗口了,每一个前台程序都至少有一个窗口,一个窗口也是你可以看到的部分,比如,QQ有如下的登录窗口 基本上你在Windows中可见 ...

  2. Java中字符串相等与大小比较

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  3. Hadoop on Mac with IntelliJ IDEA - 3 解决MRUnit - No applicable class implementing Serialization问题

    本文讲述在IntelliJ IDEA中使用MRUnit 1.0.0测试Mapper派生类时因MapDriver.withInput(final K1 key, final V1 val)的key参数被 ...

  4. strutx.xml中配置文件的讲解

    Struts2框架的核心就是struts.xml文件了,该文件主要负责管理Struts的2的业务控制组件的核心内容.为了避免struts.xml的文件国 语庞大和臃肿,我们可以通过把一个struts. ...

  5. C++转义字符使用

    编码过程中字符串可能过长,这通常须要换行,对于换行转义字符\ ,使用时要保证\后无空格,否则会出现"error C2017:非法的转义字符 "错误 如 //  ''\"后 ...

  6. C#实现汉字转换为拼音缩写的代码

    using System; using System.Configuration; using System.Data; using System.Web; using System.Web.Secu ...

  7. Asp.net 使用正则和网络编程抓取网页数据(有用)

    Asp.net 使用正则和网络编程抓取网页数据(有用) Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </su ...

  8. iOS 2D绘图详解(Quartz 2D)之Transform(CTM,Translate,Rotate,Scale)

    前言:Quartz默认采用设备无关的user space来进行绘图,当context(画板)建立之后,默认的坐标系原点以及方向也就确认了,可以通过CTM(current transformation ...

  9. iOS开发——UI篇OC篇&UITableView简单封装

    UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...

  10. php实现网页标签补全方法(转)

    导读:PHP在生成静态文件的时候,有时候会因为一些混编问题让HTML标签不完整或混乱而导致页面混乱.作者分享下面这段小代码可以非常方便解决问题. 如果你的网页内容的html标签显示不全,有些表格标签不 ...