...

使用Docker部署Selenium Grid服务

在编写调试脚本时一般采用本机上的Selenium环境。在执行用例和协作时,则需要我们部署Selenium服务,使用专门的Selenium服务来执行用例。

使用Selenium Grid

部署Selenium服务一般采用Selenium Grid的方式。Selenium Grid采用Hub/Node的模式,一个集中服务Hub,连接多个拥有浏览器的执行Node节点。
如下图。

使用Selenium Grid搭建Selenium服务的方式如下。

  1. 下载Selenium Server: https://www.selenium.dev/downloads/

    下载下来是一个名为selenium-server-standalone-3.141.59.jar的jar包
  2. 启动主控服务-Hub
    使用以下命令启动Hub节点
java -jar selenium-server-standalone-3.141.59.jar -role hub -port 5566

访问Grid Console http://localhost:5566/grid/console

  1. 注册执行节点-Node
java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://localhost:5566/grid/register/ -port 5577

如果执行节点和Hub节点不知一台机器,则需要把localhost改为Hub节点的ip地址。
再次访问Grid Console 就可以看到注册的节点和节点所拥有的浏览器。

使用Selenium Grid服务需要使用webdriver.Remote方法连接服务,并传入desired_capbilities 期望的能力。示例脚本如下。

from selenium import webdriver
import time

caps = {
    'platform': 'ANY',
    'browserName': 'chrome',
    'version': '',
}
dr = webdriver.Remote('http://localhost:5555/wd/hub', desired_capabilities=caps)
dr.get('https://www.baidu.com')
print(dr.title)
dr.quit()

运行脚本,此时Hub就会选择一个满足你要求的节点执行。

使用Docker版Selenium

执行Node服务,一般都会采用Linux系统如Centos或Ubuntu,大部分情况是无界面的,那就不方便安装有界面的Chrome浏览器,虽然有一些解决方法或使用Chrome的Headless模式。
然而定位问题等也非常不方便,因此推荐使用Docker的方式不是Selenium Grid + Node服务,操作方式如下。

  1. 安装Docker
  1. 下载镜像
docker pull selenium/hub
docker pull selenium/node-firefox
docker pull selenium/node-chrome

注意:selenium/node-firefoxselenium/node-chrome都是无界面的。
要想能看到实时运行界面,需要使用以下两个镜像之一。

docker pull selenium/standalone-chrome-debug
docker pull selenium/standalone-firefox-debug
  1. 启动Hub节点的Docker
docker run -p 5555:4444 -d --name hub selenium/hub
  1. 启动Node节点的Docker
docker run -P -d --link hub:hub --name firefox selenium/node-firefox
docker run -P -d --link hub:hub --name chrome selenium/node-chrome

或带Debug界面的Node节点

docker run -d -p 5900:5900 --link hub:hub selenium/node-chrome-debug

如果想要查看实时运行界面,需要使用vnc viewer, 配置如图:

使用zelenium

zelenium同样是基于Selenium Grid的Docker镜像,优点是集成了运行日志和录像功能,非常方便易用。
操作方式参考 Zelenium的初步使用

参考: https://blog.csdn.net/lb245557472/article/details/91966770
https://www.cnblogs.com/nanaheidebk/p/10109013.html

posted @ 2020-10-22 20:55  韩志超  阅读(2857)  评论(0编辑  收藏  举报