Selenium Grid2
Selenium Grid通过同时在多台服务器上运行测试,将Selenium远程控制提升到另一个级别,从而缩短了测试多个浏览器或操作系统所需的时间。
官方github 网址:https://github.com/SeleniumHQ/selenium/wiki/Grid2
Selenium Grid在Windows或Mac环境下操作基本一致,本章示例为在Windows环境下进行讲解。
一、部署与启动:
1、将已准备好的Selenium-server文件拷贝到相应目录下(例如:C盘根目录)。
driver目录存放Firefox、Chrome和IE驱动。
lib目录存放Selenium jar包(selenium-server-standalone-3.11.0.jar)。
对于普通的WebDriver脚本(非远程),不需要Java环境。但是,要使用Selenium Webdriver Remote或遗留Selenium API(Selenium-RC),需要运行Selenium server。Selenium server是需要Java环境的。
Selenium server下载地址:http://selenium-release.storage.googleapis.com/index.html
2、启动hub(总控节点,连接调用node)。
命令行输入java -jar selenium-server-standalone-3.11.0.jar -role hub
启动hub的机器可以不是测试机,任意一台机器有Java环境的机器都可以。
这个是整个Selenium Grid的中枢节点,所有的远程测试都会由经它后再被转发出去,然后在对应的测试机上执行测试。
默认启动端口为4444。如果要更改这个端口,可以再上面的命令后面加上 -port XXXX。
例如:java -jar selenium-server-standalone-3.11.0.jar -role hub -port 8888
可以将启动命令写在bat文件里,双击执行就可以启动了。
例如:启动hub.bat文件
启动hub.bat文件内容:
代码语言:javascript复制java -jar C:/Selenium-server/lib/selenium-server-standalone-3.11.0.jar -role hub
pause
双击执行,启动hub。
启动完后,当前hub机器的IP地址为10.106.29.24,你可以用浏览器打开http://10.106.29.24:4444/grid/console 这个网址查看hub的状态,当前没有子节点node的信息。
3、启动node(负责执行测试,调用浏览器)。
命令行输入java -jar selenium-server-standalone-3.11.0.jar -role node -hub http://10.106.29.24:4444/grid/register
其中10.106.29.24为hub机器的IP地址,上面命令默认启动5555端口,可使用 -port更改。
例如:
代码语言:javascript复制java -jar selenium-server-standalone-3.11.0.jar -port 6666 -role node -hub http://10.106.29.24:4444/grid/register
可以将启动命令写在bat文件里,双击执行就可以启动了。
例如:启动node.bat文件
启动node.bat文件内容:
代码语言:javascript复制java -jar C:/Selenium-server/lib/selenium-server-standalone-3.11.0.jar -port 6666 -role node -hub http://10.106.29.24:4444/grid/register
pause
双击执行启动node.bat文件,启动node。
将driver目录下存放的Firefox、Chrome和IE驱动配置环境变量,使执行脚本时可以驱动浏览器操作。
如果启动node所在的机器已经安装了Python(环境变量配置完成),将驱动拷贝到Python的安装目录即可。
如果启动node所在的机器没有安装Python,则可以将驱动拷贝到Java环境下(环境变量配置完成)。例如:Java环境jdk的bin目录下
二、查看Selenium Grid状态:
当hub和所有的代理节点node都启动成功后,可以通过浏览器查看当前Selenium Grid的状态,直接访问http://10.106.29.24:4444/grid/console可以看到页面显示了可以支持测试的代理节点的数量和类型,这里显示的数量和类型和你启动代理节点时所带的配置参数有关。当启动代理节点时其实就是一个注册过程;启动时所带的参数会被hub记住作为注册信息,所以页面中所看到的信息就是各代理节点注册时信息的汇总。
默认,每个node会启动11个浏览器实例:Firefox 5个、Chrome 5个、IE 1个。由于使用的是Selenium 3.0,去掉了对RC(Remote Control)协议的支持,所以只支持WebDriver协议。
所有的请求都发给了hub,然后由hub分配给匹配的node节点来执行。
例如:hub的IP 10.106.29.24:4444,node的IP 10.106.17.69:6666
代码语言:javascript复制driver = webdriver.Remote(command_executor='http://10.106.29.24:4444/wd/hub', desired_capabilities=DesiredCapabilities.FIREFOX)
如果不经过hub,直接指定node节点来执行。
例如:hub的IP 10.106.29.24:4444,node的IP 10.106.17.69:6666
代码语言:javascript复制driver = webdriver.Remote(command_executor='http://10.106.17.69:6666/wd/hub', desired_capabilities=DesiredCapabilities.FIREFOX)
三、脚本代码:
1、远程启动控制Chrome
代码语言:javascript复制#!/usr/bin/env python
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
"""
Selenium Grid2(远程启动控制Chrome)
"""
desired_cap = DesiredCapabilities.CHROME
desired_cap['chromeOptions'] = {}
desired_cap['chromeOptions']['args'] = ['disable-infobars']
driver = webdriver.Remote(command_executor='http://10.106.29.24:4444/wd/hub', desired_capabilities=desired_cap)
driver.get("http://www.baidu.com")
driver.find_element_by_name("wd").send_keys("Selenium")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.quit()
2、远程启动控制Firefox
代码语言:javascript复制#!/usr/bin/env python
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
"""
Selenium Grid2(远程启动控制Firefox)
"""
driver = webdriver.Remote(command_executor='http://10.106.29.24:4444/wd/hub', desired_capabilities=DesiredCapabilities.FIREFOX)
driver.get("http://www.baidu.com")
driver.find_element_by_name("wd").send_keys("Selenium")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.quit()
3、远程启动控制IE
代码语言:javascript复制#!/usr/bin/env python
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
"""
Selenium Grid2(远程启动控制IE)
"""
driver = webdriver.Remote(command_executor='http://10.106.29.24:4444/wd/hub', desired_capabilities=DesiredCapabilities.INTERNETEXPLORER)
driver.get("http://www.baidu.com")
driver.find_element_by_name("wd").send_keys("Selenium")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.quit()
4、远程启动控制Firefox、Chrome、IE
代码语言:javascript复制#!/usr/bin/env python
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
"""
Selenium Grid2(远程启动控制Firefox、Chrome、IE)
"""
lists=['firefox','chrome','internet explorer']
# 通过不同的浏览器执行脚本
for browser in lists:
driver = webdriver.Remote(
command_executor='http://10.106.29.24:6666/wd/hub',
desired_capabilities={'platform': 'ANY','browserName':browser,'version': '','javascriptEnabled': True})
print("打开:" browser)
driver.get("http://www.baidu.com")
driver.find_element_by_name("wd").send_keys("Selenium")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.quit()
- End -