您的位置:首页 > 其它

selenium 测试框架中使用grid

2016-05-06 16:15 489 查看
转载自:http://www.cnblogs.com/tobecrazy/

首先介绍一下grid ,selenium grid 是一种执行测试用例时使用的包含不同平台(windows、Linux、Android)的框架,并且这些平台是由一个中心点控制,这个中心点称之为HUB,而那些不同的平台称之为NODE

其结构如下:



为什么使用selenium grid:

如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的solution就是使用grid.selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成。hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。

怎么使用:

首先启用HUB:

在A机器下载:selenium standalone 2.53:http://npm.taobao.org/mirrors/selenium/2.53/

然后创建HUB.bat

内容为:

java -jar selenium-server-standalone-2.53.0.jar -role hub


其默认监听端口4444,默认IP localhost ;如果要修改,只需要加-port 参数和-Hubhost 

java -jar selenium-server-standalone-2.53.0.jar -role hub -port 1235 -Hubhost 172.16.0.45


接下来在B机添加node ,创建Node.bat,这里使用的是修改过的Hubhost Ip 和端口

java -jar selenium-server-standalone-2.53.0.jar -role node -hub http://172.16.0.45:1235/grid/register[/code] 
为了使用chrome和IE driver,我们需要这样设置,jar包和浏览器在同一目录下

java -Dwebdriver.ie.driver="E:\webdriver\IEDriverServer.exe" -Dwebdriver.chrome.driver="E:\webdriver\chromedriver.exe" -jar selenium-server-standalone-2.53.0.jar -role node -hub http://172.16.0.45:1235/grid/register[/code] 
分别启动这两个bat

若使用remote Driver,需要设置这样的参数

DesiredCapabilities capability = DesiredCapabilities.firefox();
WebDriver driver = new RemoteWebDriver(new URL("http://172.16.0.45:1235/grid/register"), capability);
capability.setBrowserName("firefox" );


所以我们索性创建一个bean

package com.wiley.library.utils;

/**
* for remote browser bean
* @author Wiley
*
*/
public class RemoteBrowserBean {
private String browserName;
private String hubURL;

public String getBrowserName() {
return browserName;
}

public RemoteBrowserBean(String browser) {
this.browserName=browser;
this.hubURL="http://172.16.0.45:1235/wd/hub";

}

public void setBrowserName(String browserName) {
this.browserName = browserName;
}

public String getHubURL() {
return hubURL;
}

public void setHubURL(String hubURL) {
this.hubURL = hubURL;
}

}


然后在DriverFactory里创建getRemoteDriver

package com.wiley.library.utils;

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class DriverFactory {
/**
* This method will create RemoteWebdriver
* @author Wiley
* @param remoteBrowserBean
* @return WebDriver
*/
public static WebDriver getRemoteDriver(RemoteBrowserBean remoteBrowserBean) {
DesiredCapabilities capability = null;
if (remoteBrowserBean.getBrowserName().contains("firefox")) {
capability = DesiredCapabilities.firefox();
} else if (remoteBrowserBean.getBrowserName().contains("chrome")) {
capability = DesiredCapabilities.chrome();
} else if (remoteBrowserBean.getBrowserName().contains("ie")) {
capability = DesiredCapabilities.internetExplorer();
capability.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
capability.setCapability("ignoreProtectedModeSettings", true);
}

WebDriver driver = null;
try {
driver = new RemoteWebDriver(
new URL(remoteBrowserBean.getHubURL()), capability);
} catch (MalformedURLException e) {
e.printStackTrace();
}
capability.setBrowserName(remoteBrowserBean.getBrowserName());
driver.manage().window().maximize();
return driver;
}
}


接下来就可以在case里边使用

package com.wiley.library.testcases;

import static org.junit.Assert.*;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

import com.wiley.library.utils.DriverFactory;
import com.wiley.library.utils.RemoteBrowserBean;

public class GridDemo {
public WebDriver driver;
//先要启动server
@Test
public void accessWebsite() throws Exception{
driver = DriverFactory.getRemoteDriver(new RemoteBrowserBean("chrome"));
driver.get("https://www.baidu.com");
driver.findElement(By.id("kw")).sendKeys("selenium");
driver.findElement(By.id("su")).click();
Thread.sleep(3000);
assertEquals("selenium_百度搜索",driver.getTitle());
driver.quit();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  selenium grid