本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试。
运行环境为Windows 10,Selenium版本为 3.5.0,Chrome版本为61,Firefox版本为55

1. Selenium Grid简介

Selenium Grid允许你在多台机器的多个浏览器上并行的进行测试,即分布式测试。
通常,以下两种情况会需要使用Selenium Grid:
1) 通常多个浏览器的兼容性测试,即在不同浏览器或不同操作系统的浏览器中进行测试
2) 测试用例较多时,可以通过分布式测试减少测试执行时间 

2. Selenium Grid结构

Selenium Grid由一个中心hub及多个节点node组成(类似于其他分布式系统的matser-slave),其中hub用来管理各个node的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求再转发给node来执行。

3. 环境准备

由于Selenium Grid的hub及node启动时需要java环境,所以首先需要安装JDK。 

3.1 JDK环境

2. 选择Java SE 8u151/ 8u152,点击JDK下载
3. 安装下载的JDK
4. 配置系统环境变量 

3.2 selenium-server-standalone下载

2. 下载与本机selenium 3.5.0匹配的版本:selenium-server-standalone-3.5.0.jar
 
2. 拷贝selenium-server-standalone-3.5.0.jar至本地工作目录下,如c:\grid

3.3 webdriver下载

3.3.1 IE

2) 下载与selenium版本、系统均匹配的IEDriver版本:IEDriverServer_Win32_3.5.0.zip

3.3.2 Chrome

2) 下载与系统及浏览器版本匹配的driver版本:chromedriver_win32.zip

3.3.3 Firefox

2) 下载与系统及浏览器版本匹配的driver版本:geckodriver-v0.19.1-win64.zip
 

driver下载完成解压后,分别拷贝IEDriverServer.exe,geckodriver.exe,chromedriver.exe至Python安装路径(如C:\Python27\)下即可

4. Selenium Grid启动

4.1 启动hub

hub启动命令如下:
java -jar selenium-server-standalone-3.5.0.jar -role hub
其中 -role指定角色为hub,通过下图可以看到:hub已使用默认4444端口启动成功,且node可以通过http://localhost:4444/grid/register/进行注册

4.2 启动node

node启动命令可以使用下面两个钟的任意一个:
java -jar selenium-server-standalone-3.5.0.jar -role node -port 5555 -hub http://localhost:4444/grid/register
其中 -role指定角色为node, -port指定端口为 5555, -hub指定连接hub地址,通过下图可以看到node已成功连接hub
或者使用下面的命令:
java -jar selenium-server-standalone-3.5.0.jar -role node

同理我们另外启动两个 node(使用端口号分别为5556/5557):

java -jar selenium-server-standalone-3.5.0.jar -role node -port 5556 -hub http://localhost:4444/grid/register
java -jar selenium-server-standalone-3.5.0.jar -role node -port 5557 -hub http://localhost:4444/grid/register
 
此时打开页面http://localhost:4444/grid/console,可以看到我们启动的三个node:

4.3 更好的启动方法 — bat脚本

1. 新建一个文件selenium_grid.bat,写入我们刚才启动hub及node的命令:
cd /d D:\grid
start java -jar selenium-server-standalone-3.5.0.jar -role hub
start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5555 -hub http://localhost:4444/grid/register
start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5556 -hub http://localhost:4444/grid/register
start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5557 -hub http://localhost:4444/grid/register
1) 第一行是进入并修改当前目录为存放 selenium-server-standalone-3.5.0.jar的目录:D:\grid
2) 后面三行stat java...是分别打开新的cmd窗口用以启动hub及node
 
2. 双击selenium_grid.bat即可启动hub及node
 
下面,我们编写一个Selenium Grid自动化测试脚本,分别在3个node上运行Chrome,Firefox及IE浏览器,执行WEB页面自动化测试。
示例脚本如下:
例子一:
使用remote的方式来测试自动运行浏览器:
from selenium.webdriver import Remote

driver = Remote(command_executor= 'http://192.168.87.1:4444/wd/hub',  #command_executor参数格式是固定的
desired_capabilities= {'platform':'ANY',
'browserName':'chrome', #这个desired_capabilities参数格式也是固定的
'version':'',
'javascriptEnable':True
}
) driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('remote')
driver.find_element_by_id('su').click()

例子二:

我们分别在本机上开启了一个hub 和3个node: 来测试自动运行浏览器

 lists = {'http://192.168.87.1:4444/wd/hub':'chrome',
'http://192.168.87.1:5555/wd/hub': 'firefox',
'http://192.168.87.1:5556/wd/hub': 'firefox'} for host,browser in lists.items():
print host,browser driver = Remote(command_executor=host,
desired_capabilities={'platform':'ANY',
'browserName':browser,
'version':'',
'javascriptEnabled':True}
) driver.get('http://www.baidu.com')
16 driver.find_element_by_id('kw').send_keys(browser)
driver.find_element_by_id('su').click()

例子三:实现在远程的node上运行测试用例

要想在其他主机上启动node,则必须满足下面的条件:

(1).本地的hub主机必须与远程的node主机之间可以用ping联通.我用的是虚拟机 需要注意一点的是 需要关闭防火墙才可以ping通对方,否则会不通.

(2)远程主机必须安装浏览器和webdriver驱动 并且要放在环境变量path目录下

(3).远程主机必须要安装java环境,并且还需要讲selenium server的jar包放在远程主机本地目录下,因为在调用远程node主机的时候需要在远程主机上运行node

(4).也要安装python环境

操作步骤:

1.启动本地hub主机(本机IP地址为:192.168.87.1)

2.启动远程node主机(远程主机ip地址为:192.168.31.128)

设置端口号为5556,指向的hub为主机IP地址:192.168.87.1

3.修改远程主机的ip地址和端口号,在远程主机上的firefox和Chrome上运行脚本

lists = {'http://192.168.31.128:5556/wd/hub':'chrome',
'http://192.168.31.128:5555/wd/hub': 'firefox',
'http://192.168.87.1:4444/wd/hub': 'firefox'} for host,browser in lists.items():
print host,browser driver = Remote(command_executor=host,
desired_capabilities={'platform':'ANY',
'browserName':browser,
'version':'',
'javascriptEnabled':True}
) driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys(browser)
driver.find_element_by_id('su').click()

现在再来运行脚本,会发现在远程主机上可以看到脚本被运行.

5. 常见问题

脚本运行过程中若IE浏览器报错找不到元素,而Chrome及Firefox浏览器正常,原因是IE浏览器的保护模式没有关闭:
1) 打开IE浏览器,在浏览器的菜单栏上点击“工具”选项,然后点击“Internet选项”
2) 在“Internet选项”中,切换到“安全”选项,取消“启用保护模式”的勾选
3) 并且上面四个区域的保护模式都需要关闭

配置selenium grid的更多相关文章

  1. Python+Selenium笔记(十一):配置selenium Grid

    (一) 前言 Selenium Grid可以将测试分布在若干个物理或虚拟机器上,从而实现分布方式或并行方式执行测试. 这个链接是官方的相关说明. https://github.com/Selenium ...

  2. 转:Selenium Grid+JAVA +Windows 配置(Selenium 2.0)

    Selenium-Grid 允许你在多台机器的多个浏览器上并行的进行测试,也就是说,你可以同时运行多个测试.本质上来说就是,Selenium-Grid 支持分布式的测试执行.它可以让你的测试在一个分布 ...

  3. 搭建selenium grid简单配置

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

  4. Selenium Grid的原理、配置与使用(转)

    Selenium GridSelenium Grid在前面介绍Selenium的时候说过它有三大组件,Selenium Grid就是其中之一而作用就是分布式执行测试.讲分布式之前还是要说说UI自动化的 ...

  5. selenium grid的使用与配置

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

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

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

  7. 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 ...

  8. selenium Grid(一)

    selenium grid Quick Start selenium-grid是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个hub节点和若干个代理节点组成.hub用来管理各个代理节点的注册 ...

  9. selenium Grid

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

随机推荐

  1. 51nod 1101 换零钱 (完全背包)

    N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元. 例如:5分钱换为零钱,有以下4种换法: 1.5个1分 2.1个2分3个1分 3.2个2分 ...

  2. ES6学习 --函数参数默认值与解构赋值默认值

    1. ES6的解构ES6中引入了解构赋值的操作,其作用是:将值从数组Array或属性从对象Object提取到不同的变量中 即分为两种情况:从数组Array中解构,以及从对象Object中解构 ①.从数 ...

  3. 2、Kafka架构

    Kafka架构图 1)Producer :消息生产者,就是向kafka broker发消息的客户端. 2)Consumer :消息消费者,向kafka broker取消息的客户端 3)Topic :可 ...

  4. 关于oracle result_cache

    结果集缓存 和聚合物化视图类似,报表系统和数据仓库系统是最适合结果集缓存的,这些系统通常具有大量复杂的SQL,其中不少子查询包含聚合函数,如果能够尽可能重用这些已经计算过的聚合结果集,将极大的提升系统 ...

  5. JS设计模式(7)组合模式

    什么是组合模式? 定义:1.将对象组合成树形结构以表示"部分-整体"的层次结构.2.组合模式使得用户对单个对象和组合对象的使用具有一致性.3.无须关心对象有多少层,调用时只需在根部 ...

  6. Oracle11g导出为Oracle10g版本数据,解决10g不兼容11g文件

    EXPDP USERID='JCSJ/JCSJ@FZBD' schemas=JCSJ directory=bac_file dumpfile=JCSJ.dmp logfile=JCSJ.log ver ...

  7. Cmd Markdown 编辑阅读器

    我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们为记录思想和分享知识提供更专业的工具. 您可以使用 Cmd ...

  8. python 基础知识点二

    深浅copy 1对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的. l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 prin ...

  9. jQuery学习笔记(一)

    jQuery 事件 - ready() 方法 实例 在文档加载后激活函数(): $(document).ready(function(){ $(".btn1").click(fun ...

  10. 使用ByteArrayOutputStream解决IO乱码问题的踩坑记录

    经过:今天在用s3接口做ceph储存的时候,要实现一个io下载的接口.需要把InputStream转成byte[],一开始,是的写法是这样的: byte[] buf = new byte[(int) ...