感悟时分 发表于 2018-5-29 16:00:50

selenium 测试框架中使用grid

首先介绍一下grid ,selenium grid 是一种执行测试用例时使用的包含不同平台(windows、Linux、Android
)的框架,并且

这些平台是由一个中心点控制,这个中心点称之为HUB,而那些不同的平台称之为NODE

其结构如下:



为什么使用selenium grid:

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

怎么使用:

首先启用HUB:

在A机器下载:selenium standalone 4.6:http://pan.baidu.com/s/1qWE7SD2

然后创建HUB.bat

内容为:

1 java -jar selenium-server-standalone-2.46.0.jar -role hub
其默认监听端口4444,默认IP localhost如果要修改,只需要加-port 参数和-Hubhost

java -jar selenium-server-standalone-2.46.0.jar -role hub-port 1235 -Hubhost 192.168.2.45
接下来在B机添加node ,创建Node.bat,这里使用的是默认的Hubhost Ip 和端口

1 java -jar selenium-server-standalone-2.46.0.jar -role node -hub http://localhost:4444/grid/register
为了使用chrome和IE driver,我们需要这样设置

1 java -Dwebdriver.ie.driver="C:\Users\workspace\Demo\webDriver\IEDriverServer.exe" -Dwebdriver.chr
ome.driver="C:\Users\workspace\Demo\webDriver\chromedriver.exe" -jar selenium-server-standalone-
2.46.0.jar -role node -hub http://localhost:4444/grid/register
分别启动这两个bat

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

DesiredCapabilities capability = DesiredCapabilities.firefox();
      WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
      capability.setBrowserName("firefox" );
      capability.setVersion("3.6");
所以我们索性创建一个bean

复制代码
1 /**
2*
3*/
4 package com.dbyl.libarary.utils;
5
6 /**
7* for remote browser bean
8* @author Young
9*
10*/
11 public class RemoteBrowserBean {
12   private String browserName;
13   private String version;
14   private String[] platform;
15   private String hubURL;
16   public String getBrowserName() {
17         return browserName;
18   }
19   
20   public RemoteBrowserBean()
21   {
22         this.browserName="firefox";
23         this.version="38";
24         this.platform=new String[]{"VISTA", "windows 7"};
25         this.hubURL="http://localhost:4444/wd/hub";
26         
27   }
28   
29   public RemoteBrowserBean(String browser)
30   {
31         this.browserName=browser;
32         this.version="42";
33         this.platform=new String[]{"VISTA", "windows 7"};
34         this.hubURL="http://localhost:4444/wd/hub";
35         
36   }
37   
38   public void setBrowserName(String browserName) {
39         this.browserName = browserName;
40   }
41   public String getVersion() {
42         return version;
43   }
44   public void setVersion(String version) {
45         this.version = version;
46   }
47
48   
49   public String[] getPlatform() {
50         return platform;
51   }
52
53   public void setPlatform(String[] platform) {
54         this.platform = platform;
55   }
56
57   public String getHubURL() {
58         return hubURL;
59   }
60   public void setHubURL(String hubURL) {
61         this.hubURL = hubURL;
62   }
63   
64
65 }
复制代码
然后在DriverFactory里创建getRemoteDriver

复制代码
1 /**
2      * This method will create RemoteWebdriver
3      * @author Young
4      * @param remoteBrowserBean
5      * @return WebDriver
6      */
7   public static WebDriver getRemoteDriver(RemoteBrowserBean remoteBrowserBean) {
8         DesiredCapabilities capability = null;
9         if (remoteBrowserBean.getBrowserName().contains("firefox")) {
10             capability = DesiredCapabilities.firefox();
11         } else if (remoteBrowserBean.getBrowserName().contains("chrome")) {
12             capability = DesiredCapabilities.chrome();
13         }
14
15         WebDriver driver = null;
16         try {
17             driver = new RemoteWebDriver(
18                     new URL(remoteBrowserBean.getHubURL()), capability);
19         } catch (MalformedURLException e) {
20             e.printStackTrace();
21         }
22         capability.setBrowserName(remoteBrowserBean.getBrowserName());
23         capability.setVersion(remoteBrowserBean.getVersion());
24         capability.setCapability(remoteBrowserBean.getPlatform(),
25               remoteBrowserBean.getPlatform());
26         driver.manage().window().maximize();
27         return driver;
28   }
复制代码
接下来就可以在case里边使用

1 @BeforeClass(alwaysRun=true)
2   public void beforeTest()
3   {
4         driver = DriverFactory.getRemoteDriver(new RemoteBrowserBean("chrome"));
5   }

页: [1]
查看完整版本: selenium 测试框架中使用grid